function createFunction(){
var result = new Array();
for ( var i = 0; i < 10 ; i ++ ){
result[i] = function(){
return i;
}
}
return result;
}
for ( let i = 0; i < createFunction().length ; i++ ){
console.log(createFunction()[i]());
}
在看Js高级程序设计第三版的时候,看到这里;发现结果和书上描述一致,都是输出10;但是使用let之后,为什么就可以正常显示0-10;
function createFunction(){
var result = new Array();
for ( let i = 0; i < 10 ; i ++ ){
result[i] = function(){
return i;
}
}
return result;
}
for ( let i = 0; i < createFunction().length ; i++ ){
console.log(createFunction()[i]());
}
var
和let
的区别主要是var
是function-scope
的,而let
是block-scope
的。这里最好的理解应该是如果用var
定义的话,因为var
在整个函数中持续存在,所以后面修改的值会体现到匿名函数中。而let
的作用域没有那么广,所以不能影响前面已经定义的匿名函数。