2

可能重复:
JavaScript:var functionName = function() {} vs function functionName() {}

我有一些 Javascript,除了我可以从某些区域调用但不能从其他区域调用的这个函数之外,它大部分都可以使用。这似乎是一个范围问题,但我不知道为什么。

$().ready(function () {
   UpdateElfDisplay(); // <--- Undefined

   $('#Attribute1').change(function () {
      UpdateElfDisplay();  // <--- Works just fine.
   });

   var UpdateElfDisplay = function () {
      // ... some work done here 
   };
 });

正如我在上面所标记的,当我从 .change() 函数调用 UpdateElfDisplay 函数时它工作正常,但是如果我在加载文档时尝试调用它,我会得到一个“未定义”。有人可以解释原因,或将我引导到描述此的资源。

4

2 回答 2

5

您在定义之前调用该函数,因此它不起作用。处理程序中的那个稍后会被调用,所以它可以工作

如果您使用函数声明,它将被“提升”并且可以工作。

function UpdateElfDisplay () {
  // ... some work done here 
}

JavaScript 解释器在计算任何表达式之前计算函数的声明形式。


边注

它是TypeError而不是ReferenceError的原因是它var UpdateElfDisplay实际上是像函数声明一样被提升,但赋值本身没有被提升。

这意味着变量存在,但还没有您指定的值。


旁注2

您的处理程序可能会像这样重写:

$('#Attribute1').change(UpdateElfDisplay);
于 2012-10-04T17:53:20.523 回答
4
var UpdateElfDisplay = function () {

直到这条线,UpdateElfDisplay还没有被初始化。

于 2012-10-04T17:53:25.803 回答