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]());
}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
var和let的区别主要是var是function-scope的,而let是block-scope的。这里最好的理解应该是如果用var定义的话,因为var在整个函数中持续存在,所以后面修改的值会体现到匿名函数中。而let的作用域没有那么广,所以不能影响前面已经定义的匿名函数。用var的话,整个函数只有一个i,所有闭包里面也都是那个i,你改了i之后所有闭包也跟着一起改。
let的话会为每次循环生成一个i,闭包里面的是独立的i,而且出了循环就访问不到了。