猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
对于javascript里的块作用域不是很理解,比如下面的这段代码为什么会输出5个6?
for(var i=1;i<=5;i++){
setTimeout(function timer(){ console.log(i); },i*1000); }
守着一只汪
浏览 562
回答 1
1回答
青春有我
首先js没有严格意义的块作用域,块作用域可以用一个立即调用的函数来模拟然后你的这段代码和块作用域无关,这是一个js闭包的问题,所谓闭包就是可以访问另一个函数作用域中变量的函数,所以这里的setTimeout是一个闭包,它在for语句所在的作用域被调用,在它内部可以访问for语句中定义的(但不是在它自己作用域内)变量i,这是因为闭包保存了包含函数的整一个变量对象所以,i从1到5,循环体执行5次,当最后因为i变为6跳出循环时,因为闭包引用的是外部作用域的整一个变量对象,也就引用了外部的这个i,所以每次输出的这个i就是外部的i,就是6于是就是5次6
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
JavaScript
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续