Warum wird es 10 Mal ausgegeben? Sollten die 10 nicht 1 - 9 sein? Bitte geben Sie mir eine Antwort auf diesen Fallstrick
function save_i(){
var a = [];
for(var i = 0;i<10;i++){
a[i] = function(){
return i;
}
}
return a;
}
var c = save_i();
for(var i = 0;i<10;i++){
console.log(c[i]());
//10次 10
}
只需要在for循环执行时,创建一个闭包函数将i值保存起来,既可以依次输出
之前过基础看过的文章
理解闭包,要求你写过一代码,而且接下来在自己的代码中也能用到,除些之外,就只能死记硬背了。
老派的国人喜欢让小孩子很小的时候背东西,但是不会和他们讲是什么意思,有时也讲不清,寄希望于在未来的某个时刻自然而然就懂了
以上
如果你有一定基础,推荐看我写的日志,再不懂,留言问我
http://user.qzone.qq.com/2084...
return的每个i都是引用了外部的同一个i 也就是10
var变量的作用域是函数作用域,不是块级作用域
作用域链在创建的时候就已经生成了,
c[i] = function(i){ return i; };
运行的时候当前作用域没有i,而上层作用域save_i()的i已经变成10。你认为结果是0~9,是不是你把上层作用域当做全局了a[i]赋值的时候是一堆function、也就是并没有执行、也没有拿到i、她的作用域也没取到i
当你在下面执行的时候、这一堆function都开始找自己作用域能取到的i、也就是循环执行完的10
var关键字声明变量作用域为函数作用域, 因此 for 循环中的 i 变量会发生变量提升。 楼主的将for循环中的哪一段改为自执行函数就ok了。eg:
function save_i(){
}