【发布时间】:2018-09-26 13:41:23
【问题描述】:
考虑一个简单的模式,我们在循环中调用 setTimeout 来打印循环计数器:
function g(i){
return function()
{
console.log(i);
}
}
for(i=0;i<4;i++)
{
setTimeout(g(i),3000);
}
这会返回预期的结果:
0
1
2
3
根据我的理解,这个函数应该做同样的事情
function f(i){
this.n = i;
return function()
{
console.log(this.n);
}
}
for(i=0;i<4;i++)
{
setTimeout(f(i),3000);
}
相反,我在 NodeJS 中得到了不同的结果:
undefined
undefined
undefined
undefined
在谷歌浏览器中:
3
3
3
3
这些结果对我来说都没有意义,所以我希望其他人可以向我解释这一点。
【问题讨论】:
-
没有。
var n = i;和console.log(n)会起作用的。this是完全不同的动物。 -
为什么不调用构造函数就使用
this?你期望会发生什么?请注意,您的代码将进入严格模式。你应该使用严格模式。
标签: javascript closures