有人能解释一下这个Javascript的作用域问题吗?
可能重复:有人能解释一下这个Javascript的作用域问题吗?,javascript,jquery,scope,Javascript,Jquery,Scope,可能重复: 我有一些Javascript,除了这一个我可以从某些区域调用但不能从其他区域调用的函数外,其他大部分都可以使用。这似乎是一个范围问题,但我不知道为什么 $().ready(function () { UpdateElfDisplay(); // <--- Undefined $('#Attribute1').change(function () { UpdateElfDisplay(); // <--- Works just fine.
我有一些Javascript,除了这一个我可以从某些区域调用但不能从其他区域调用的函数外,其他大部分都可以使用。这似乎是一个范围问题,但我不知道为什么
$().ready(function () {
UpdateElfDisplay(); // <--- Undefined
$('#Attribute1').change(function () {
UpdateElfDisplay(); // <--- Works just fine.
});
var UpdateElfDisplay = function () {
// ... some work done here
};
});
$().ready(函数(){
UpdateElfDisplay();//您在定义函数之前调用该函数,因此该函数不起作用。处理程序中的函数稍后被调用,因此它起作用
如果您使用函数声明,它将被“提升”并工作
function UpdateElfDisplay () {
// ... some work done here
}
JavaScript解释器在计算任何表达式之前先计算函数的声明形式
旁注
这是一个TypeError而不是ReferenceError的原因是,var UpdateElfDisplay
实际上与函数声明类似,但赋值本身没有被提升
这意味着变量存在,但尚未为其赋值
旁注2
您的处理程序可能会这样重写:
$('#Attribute1').change(UpdateElfDisplay);
直到这行,<代码> UpdateElfDisplay <代码>未被初始化。< /P>在您的第一次调用之前尝试移动UpDATEFLFECT函数声明。@ EpasCalLo- Hmm.,我可以看到为什么有些人会认为这是一个重复的问题,因为现在看起来答案是相同的。然而,我认为问题是完全不同的。例如,“天空是什么颜色?”和“海洋是什么颜色?”可能有相同的答案,但不是重复的问题。这是相同的答案,只是提问的方式不同。是的。我想我是说最终的问题和答案是相同的,但在我看到答案之前,问题似乎并不相同……如果这有任何意义的话。嗯,实际上还有更多的工作要做。改变处理者,我举st将其缩写以演示我的问题。但是你的答案现在非常清楚。谢谢。@SailingJudo:不客气。这个答案当然是完全正确的,我给了它+1。选择的答案有更多有用的细节。
var UpdateElfDisplay = function () {