关于js变量的这道题怎么做?

发布于 2022-09-04 00:09:01 字数 127 浏览 32 评论 0

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6]();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

秋风の叶未落 2022-09-11 00:09:01

答案是10,因为i在遍历完成后的值就是10。
在遍历的时候数组a被添加了function,所以任意的a[x](); 【x范围0-9】 都会执行

function () {
  console.log(i);
};

具体来说你可以试试这么执行代码,从console里看看结果,想想原因

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}

console.log(i);
console.log(a);
a[1]();
i=5
a[9]();
console.log(i);
a[11]();
老子叫无熙 2022-09-11 00:09:01

答案是 10。你把for里面的那个函数赋值去掉就会然后你会发现i=10,这能理解的吧就是程序执行了10次循环后的i是10,然后a[6]()就相当于 (function() {console.log(i);})() 问题就是求这个i,由于i是个全局变量,所以就是10呀。。。。

晨与橙与城 2022-09-11 00:09:01

for循环结束后:

a[0]=function () {  console.log(i);  };
a[1]=function () {  console.log(i);  };
...
a[9]=function () {  console.log(i);  };

i=10.
所以打印出来的是10.

倾城°AllureLove 2022-09-11 00:09:01
var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6]();

//out -> 6
请别遗忘我 2022-09-11 00:09:01

10,for循环完了以后i已经是10了,所以不管a[i]()中i是多少打印出来的都是10

痴骨ら 2022-09-11 00:09:01

闭包老问题,书上网上很多这种例子的解答

千纸鹤 2022-09-11 00:09:01

循环完了i=10,此时输出a几都是10。

木格 2022-09-11 00:09:01

输出 10 这个非常简单, 就是js没有块级作用域的特性 要是需要输出 6 就要用闭包

可以参考我写的一篇初级文章

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文