Fai*_*lde 3 javascript closures scope node.js
我在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
Run Code Online (Sandbox Code Playgroud)
您的示例在浏览器中按预期工作,但在this顶层的node.js 中global,它与您的模块不同.exports.所以,当你这样做
this.name = "Globals";
Run Code Online (Sandbox Code Playgroud)
它分配name: Globals给对象module.exports而不是global对象.
现在,当你写作
p.namePrinter()();
Run Code Online (Sandbox Code Playgroud)
它是一样的:
func = p.namePrinter();
func();
Run Code Online (Sandbox Code Playgroud)
该函数是未绑定的(= object.之前没有),因此this它将是global对象.但那里没有name......
在浏览器中,顶级代码在全局对象(即window)的上下文中执行,这与未绑定函数使用的对象相同.这就是你的代码片段工作的原因.
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |