1 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超7個(gè)贊
不是不能做函數(shù)名的問題。是i的取值的問題。
var a =[];for(var i=0;i<4;i++){ a[i] =function(){ console.log(i) } } a[2]();
對(duì)于這個(gè)來說。你將function(){console.log(i)}
存在了a數(shù)組的每一項(xiàng)中。調(diào)用的時(shí)候執(zhí)行console.log(i)
,會(huì)去查找i的值。因?yàn)閒or的{}并不是一個(gè)作用域,所以取到的i值是循環(huán)結(jié)束后的i=4;
var a =[];//你沒寫這個(gè)for(var i=0;i<4;i++){ var a[i] =function(i){ console.log(i) } } a[i](2);
對(duì)于這個(gè)來說同樣的道理相當(dāng)于a[4](2)
。a[4]
是undefined,并不是一個(gè)函數(shù),所以會(huì)報(bào)錯(cuò)a[i] is not a function
。
補(bǔ)充:
可以去看一下作用域鏈
舉個(gè)例子
var i=1;function test(){console.log(i) } test()
執(zhí)行test的時(shí)候,用到了i,所以要去查i的值。函數(shù)作用域內(nèi)部沒有(有的話就不去外面找了),就要去上一級(jí)作用域找,找到了i是1。輸出1。
for(var i=1;i<4;i++){ }function test(){console.log(i) } test()
同樣內(nèi)部沒有,要去外面找,而i經(jīng)過for循環(huán)已經(jīng)是4了,即找到的i=4,所以輸出4。
for(var i=1;i<4;i++){function test(){console.log(i) } } test()
作用域只有函數(shù)作用域。標(biāo)志是{}(除非使用let,可以去看下let的相關(guān)知識(shí))。所以就查找i值的過程,這個(gè)和上面的是一樣的。
添加回答
舉報(bào)