可能重复:
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函数工作正常但如果我在加载文档时尝试调用它,则会得到“未定义”。有人可以解释原因,或者指导我描述这个的资源。
答案 0 :(得分:5)
您在定义之前调用该函数,因此它不起作用。处理程序中的那个稍后调用,所以它可以工作
如果您使用功能声明,它将被“悬挂”并且可以正常工作。
function UpdateElfDisplay () {
// ... some work done here
}
JavaScript解释器在评估任何表达式之前评估函数的声明形式。
旁注
它是 TypeError 而不是 ReferenceError 的原因是var UpdateElfDisplay
实际上是悬挂类似于函数声明,但是赋值< / em>本身并未悬挂。
这意味着该变量存在,但它还没有您指定的值。
旁注2
您的处理程序可能会被重写为:
$('#Attribute1').change(UpdateElfDisplay);
答案 1 :(得分:4)
var UpdateElfDisplay = function () {
在此行之前,UpdateElfDisplay
尚未初始化。