在全局范围内声明的变量未被函数识别

时间:2017-09-12 13:03:49

标签: javascript node.js global

变量name = michelle在全局范围内的声明未被函数sayNameForAll()识别,请告诉我这是什么问题。

function sayNameForAll() {
console.log(this.name);
}


var person1 = {
name: "Nicholas",
sayName: sayNameForAll
};


var person2 = {
name: "Greg",
sayName: sayNameForAll
};


var name = "Michael";

person1.sayName(); 
person2.sayName(); 
sayNameForAll();

this is the output of my code

2 个答案:

答案 0 :(得分:2)

它在此脚本中按预期工作,可以通过三种方式更改此变量:

  • 当你在一个对象里面调用它时,就会得到它 对象。
  • 使用构造函数时,类函数。

  • 当你使用call(),apply()或bind()时;方法

其他明智的人会得到全球对象......



function sayNameForAll() {
console.log(this.name);
}


var person1 = {
name: "Nicholas",
sayName: sayNameForAll
};


var person2 = {
name: "Greg",
sayName: sayNameForAll
};


var name = "Michael";

person1.sayName(); 
person2.sayName(); 
sayNameForAll();




答案 1 :(得分:-1)

问题出在您运行函数的上下文中。在2个第一次运行中,它进入对象的上下文,在那里你有'这个'内部变量。对于最后一个 - 您尝试输出' this.name'但在你里面只有'名字'