关于js变量的这道题怎么做?
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6]();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6]();
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(8)
答案是10,因为i在遍历完成后的值就是10。
在遍历的时候数组a被添加了function,所以任意的a[x](); 【x范围0-9】 都会执行
具体来说你可以试试这么执行代码,从console里看看结果,想想原因
答案是 10。你把for里面的那个函数赋值去掉就会然后你会发现i=10,这能理解的吧就是程序执行了10次循环后的i是10,然后a[6]()就相当于 (function() {console.log(i);})() 问题就是求这个i,由于i是个全局变量,所以就是10呀。。。。
for循环结束后:
i=10.
所以打印出来的是10.
10,for循环完了以后i已经是10了,所以不管a[i]()中i是多少打印出来的都是10
闭包老问题,书上网上很多这种例子的解答
循环完了i=10,此时输出a几都是10。
输出 10 这个非常简单, 就是js没有块级作用域的特性 要是需要输出 6 就要用闭包
可以参考我写的一篇初级文章