来自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/

10-09 17:25