Possible Duplicate:
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 函数时,它工作正常,但如果我在加载文档时尝试调用它,则会得到“未定义”。有人可以解释原因,或者引导我找到描述此问题的资源。
最佳答案
您在定义函数之前调用该函数,因此它不起作用。稍后会调用处理程序中的处理程序,因此它可以工作
如果您使用函数声明,它将被“提升”并且可以工作。
function UpdateElfDisplay () {
// ... some work done here
}
JavaScript 解释器在计算任何表达式之前先计算函数的声明形式。
<小时/>旁注
它是 TypeError 而不是 ReferenceError 的原因是 var UpdateElfDisplay
实际上与函数声明类似,但 < em>赋值本身没有被提升。
这意味着该变量存在,但尚未具有您指定的值。
<小时/>旁注 2
您的处理程序可能会像这样重写:
$('#Attribute1').change(UpdateElfDisplay);
关于javascript - 有人可以解释一下我对这个 Javascript 的范围问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12732904/