采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
/*为什么输出5个5?,setTimeout里面不是有一个函数吗?,所以函数里面的i的作用域和for循环的i的作用域是不一样的,一个函数作用域,一个是全局作用域,所以函数里面的i为啥不是依次递增呢?*/for(var i=0; i<5; ++i){ setTimeout(function () { console.log(i); },500);}
setTimeout()异步处理,i自由变量在其上一层执行后为5,此时i=5
“一个是函数作用域”—— 理解不对,i 得在函数中定义,才算是函数作用域的,否则算是自由变量。
for(var i=0; i<5; i++){ function fn() { console.log(i); //这里一次递增输出,为什么与上面的代码不一样,这里也是自由变量啊,静态作用域也相同。 } fn(); }
上面的文本格式不好看,再发一遍。 for(var i=0; i<5; i++){ function fn() { console.log(i); } fn(); } /*这里依次递增输出,为什么与上面的代码不一样, 这里也是自由变量啊,静态作用域也相同。*/
这里不是异步啊,setTimeout 是异步执行的
登录后可查看更多问答,登录/注册
BAT高级前端工程师亲授,结合真实面试题,提高面试成功几率
984 19
957 17
1.1k 11
1.1k 10
1.0k 10