闭包经典错误 for循环传值只能传i=10怎么解释?
在firbug中显示的是先执行for里面i的递增,等到递增到10才进行闭包里面的i取值,这是why?难道也像回调函数一样进入了队列排序,等到栈里面的空了才一步步执行吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
在firbug中显示的是先执行for里面i的递增,等到递增到10才进行闭包里面的i取值,这是why?难道也像回调函数一样进入了队列排序,等到栈里面的空了才一步步执行吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(1)
在js高级程序的闭包那一节有讲到这个问题:即闭包只能取得包含函数中任何标量的最后一个值,闭包所保存的是整个变量对象而不是特殊的变量。所以每个函数引用的都是同一个变量i,都会返回10.
解决方法是:将闭包放入一个匿名函数中,闭包返回匿名函数的参数,同时每一次的i值作为匿名函数的参数传入,由于函数参数是按值传递的,所以最终可以返回不同的值。