我在nodejs上运行此代码。我想知道为什么闭包执行时不打印字符串'Globals'?闭包中的this
是否指向全局范围?
// Running on NodeJS, not in a browser!
this.name = "Globals";
function Person(name) {
this.name = name;
this.namePrinter = function() {
return function() {
console.log(this.name);
}
}
}
var p = new Person("Faiz");
p.namePrinter()(); // prints undefined. Shouldn't it print Globals?
console.log(this.name); // prints Globals
答案 0 :(得分:5)
您的示例在浏览器中按预期工作,但在顶层的node.js this
与global
不同,它是您的模块.exports
。所以当你这样做时
this.name = "Globals";
它将name: Globals
分配给module.exports
,而不是global
对象。
现在,当你写
p.namePrinter()();
它与:
相同func = p.namePrinter();
func();
该功能未绑定(=之前没有object.
),因此其this
将是global
对象。但那里没有name
......
在浏览器中,您的顶级代码在全局对象(window
)的上下文中执行,这与未绑定函数使用的对象相同。这就是您的代码段工作的原因。