Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有人能解释一下这个Javascript的作用域问题吗?_Javascript_Jquery_Scope - Fatal编程技术网

有人能解释一下这个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 () {