关于js作用域的问题

javascriptvar a = new Array;
for (var i = 0; i < 10; i++) {
    var c = i;
    a[i] = function () {
        console.log(c);
        };
    }
for(i=0;i<10;i++){
        a[i]();
    }
a[i]()的值全为9
按的我的理解是,按执行顺序,第一个for是先行执行了,当执行完毕,变量C的值,也就是恒等为9。当第二个for调用a[i]时,由于c的值已经固定了,所以不管调用多次,a[i]()都是为9,而不会发送变化。
不知道这样的理解正确否?
阅读 2.8k
3 个回答

就是这样的理解,你自己把a全部打出来看看就知道的。

clipboard.png

你的理解是对的,因为js的执行是顺序执行的,所以第一个for执行完毕后,第二个for才执行,所以你输出的值是对的

这里有个大坑,是关于作用域引用的,你可以看看,加深理解

   var a = new Array;
for (var i = 0; i < 10; i++) {
    a[i] = function () {
        console.log(i);
        };
    }
for(var c=0;c<10;c++){
        a[c]();
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题