一别经年
2015-12-29 21:54
for (var i = 0; i < 10; i++) {
setTimeout(function() {console.log(i); }, 100 * i);
}
var ==
10个10,这个涉及到了函数的闭包和作用域,这里实际上只有一个i,循环的10个函数是共享一个i的引用,如果想输出0到9的话只需将var 改成 let 即可,这样就在函数每次执行的时候创建了一个闭包
10啊
你可以这样理解,先是for(vari= 0; i< 10; i++){}然后console.log(i)执行十次
,毕竟console.log(i)是延迟执行的,它也是个函数,只有当它执行的时候参数才开始传入的
for (var i=0; i<5; i++){
(function(i){
setTimeout(function(){
console.log(i);
},i*1000);
})(i);
}
在执行setTimeout的时候,上面的i已经初始化完成了,此时i=10,所以。。。。。
在控制台输出10个10;
不是输出0到9;
JavaScript深入浅出
281102 学习 · 1020 问题
相似问题