请问这几行 javascript 代码为什么输出都是9?

for(vari=0;i<10;i++){varc=i;arr[i]=function(){console.log(c)};}arr[5]//9arr[6]//9我的意思... for(var i = 0 ;i<10;i++){
var c = i;
arr[i] = function(){ console.log(c) };
}

arr[5] // 9

arr[6] //9
我的意思是arr数组应该是指向的不同的方法吧。不同方法变量不是应该也是随着c改变的么?为什么输出却都是9?
展开
 我来答
s524797336
2015-08-25 · TA获得超过180个赞
知道小有建树答主
回答量:126
采纳率:100%
帮助的人:191万
展开全部

首先for循环不会改变作用域

你的代码相当于

var c;

var i;

for(i=0;i<10;i++){

  c = i;

  arr[i] = function(){

    console.log(c);

  }

}

执行arr[0-9]其实是执行 输出 c 这个变量

而这个c其实是最外面的那个c,也就是i的最终值也就是9,跟下面这个也同理↓

var c = 1;

function a(){

   console.log(c);

}

c = 2;

function b(){

  console.log(c);

}

a();//输出2

b();//输出2

如果你想指向不同方法的话

for (var i = 0; i < 10; i++) {
arr[i] = (function(c) {
return function(){
console.log(c);
}
})(i);
}
千羽千寻online
2015-08-25 · TA获得超过645个赞
知道小有建树答主
回答量:735
采纳率:37%
帮助的人:187万
展开全部
所有的arr指向的都是function(){}这个方法,但是在最后的时候function已经变成了console.log(9),所以当你在其余的地方对此方法进行掉用的时候,就已经成为了最后的console.log(9)了。就是说这个方法已经被不断地重写,而arr指向的永远是这个方法最新的。
若是你想得到实时的,可以在
for里面最后直接调用arr[i],这样应该就可以得到了你想要的
追问
那请问一下如果我要数组都指向不同的方法这个可以办到么?
追答
方法的名字不同就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式