为了账号安全,请及时绑定邮箱和手机立即绑定

js函数调用的问题;

js函数调用的问题;

陪伴而非守候 2018-10-27 15:10:08
var a =[];for(var i=0;i<4;i++){       a[i] =function(){        console.log(i)     } } a[2]();讲道理,函数传参不是应该在function(参数),这样吗? a【i】不应该是 函数名吗,for(var i=0;i<4;i++){      var a[i] =function(i){        console.log(i)     } } a[i](2);但是是错误的,a【i】并不能作为函数名,换成a之后for(var i=0;i<4;i++){        a =function(i){        console.log(i)     } } a(2);这样可以,输出2,就是正常的参数,我现在的问题是:a[2]();这个i的值怎么来的啊,还是说调用这个函数的话需要进行for循环,这个2是给谁阿,他可以直接给这个a[i]吗。哎。。我也不知道;。。我看不懂你们的答案,啊不知道采纳谁阿,大神看下那个说的对给说下啊,我给采纳下啊。。太菜了,,
查看完整描述

1 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

不是不能做函数名的问题。是i的取值的问题。

var a =[];for(var i=0;i<4;i++){

      a[i] =function(){        console.log(i)
    }
}
a[2]();

对于这个来说。你将function(){console.log(i)}存在了a数组的每一项中。调用的时候执行console.log(i),会去查找i的值。因为for的{}并不是一个作用域,所以取到的i值是循环结束后的i=4;

var a =[];//你没写这个for(var i=0;i<4;i++){      var a[i] =function(i){        console.log(i)
    }
}
a[i](2);

对于这个来说同样的道理相当于a[4](2)a[4]是undefined,并不是一个函数,所以会报错a[i] is not a function
补充:
可以去看一下作用域链
举个例子

var i=1;function test(){console.log(i)
}
test()

执行test的时候,用到了i,所以要去查i的值。函数作用域内部没有(有的话就不去外面找了),就要去上一级作用域找,找到了i是1。输出1。

for(var i=1;i<4;i++){
}function test(){console.log(i)
}
test()

同样内部没有,要去外面找,而i经过for循环已经是4了,即找到的i=4,所以输出4。

for(var i=1;i<4;i++){function test(){console.log(i)
}
}
test()

作用域只有函数作用域。标志是{}(除非使用let,可以去看下let的相关知识)。所以就查找i值的过程,这个和上面的是一样的。


查看完整回答
反对 回复 2018-11-07
  • 1 回答
  • 0 关注
  • 600 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号