我有两个代码块,我相信它们会产生相同的结果:
1。
for(var i=0;i<10;i+=1){ var j=i; setTimeout(function(){ console.log(j); },100); }
2。
for(var i=0;i<10;i+=1){ (function(j){ setTimeout(function(){ console.log(j); },100); })(i); }
但是,正如您大多数人所期望的那样,第一个记录为10的9次,第二个记录为0到9的正确日志。
第二个是使用闭包保留i的值。我认为第一个也应保留其价值,因为:
在var j
创建每个迭代一个新的变量j。
在迭代中将当前i
值分配给此新值j
。
j
然后,此新对象将setTimeout
在同一迭代中绑定到的函数。
下次迭代会将新的j绑定到该迭代中的函数。
但是事实证明,对于所有迭代,都j
绑定到最后一个i
值。
那么,使用function参数和创建变量之间的区别是什么var
?
请指出任何错误!提前致谢 !
谢谢你们 !我不知道javascript仅具有功能和全局作用域!怪其他教我这样做的语言:P