
请问这几行 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? 展开
var c = i;
arr[i] = function(){ console.log(c) };
}
arr[5] // 9
arr[6] //9
我的意思是arr数组应该是指向的不同的方法吧。不同方法变量不是应该也是随着c改变的么?为什么输出却都是9? 展开
2个回答
展开全部
首先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);
}
展开全部
所有的arr指向的都是function(){}这个方法,但是在最后的时候function已经变成了console.log(9),所以当你在其余的地方对此方法进行掉用的时候,就已经成为了最后的console.log(9)了。就是说这个方法已经被不断地重写,而arr指向的永远是这个方法最新的。
若是你想得到实时的,可以在
for里面最后直接调用arr[i],这样应该就可以得到了你想要的
若是你想得到实时的,可以在
for里面最后直接调用arr[i],这样应该就可以得到了你想要的
追问
那请问一下如果我要数组都指向不同的方法这个可以办到么?
追答
方法的名字不同就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |