来自javascript.info:
function makeArmy() {
var shooters = []
for(var i=0; i<10; i++) {
var shooter = function shoot() {
alert( shoot.i )
}
shooter.i = i
shooters.push(shooter)
}
return shooters
}
var army = makeArmy()
army[0]() // 0
army[1]() // 1
有趣的部分:
var shooter = function shoot() {
alert( shoot.i )
}
shooter.i = i
我的问题是这样的:为什么以下操作无效:
var shooter = function() {
alert( shooter.i )
}
shooter.i = i
换句话说,为什么第一个按预期工作,而第二个却不按预期工作?第一个(给函数本身一个名称并从函数内部使用它)和第二个(使用引用该函数的变量)之间的实际区别是什么?
最佳答案
在变量shooter
的初始化程序表达式(function() {...}
)完成之前,您不能引用它。相反,如果你说
var shooter;
shooter = function() { alert(shooter.i); }
这样就可以了,因为变量已经被声明并且在函数表达式求值的范围内。
关于javascript - 命名函数表达式和使用变量引用之间的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15728969/