javascript - 有人可以解释一下我对这个 Javascript 的范围问题吗?

标签 javascript jquery scope

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/

相关文章:

javascript - 如何在此 jquery 代码中使用函数参数,或者是否有更好的解决方案?

javascript - 以 Instantclick 风格进行 PJAX 调用(仅在链接悬停时加载所需的内容)

javascript - Youtube iFrame 嵌入停止视频不是功能

javascript - 在慢速网络上,前一个 Ajax 请求会被后续请求取消

javascript - 打印时扩展div的高度

javascript - 我的 req.params.id 未定义。我该如何修复我的路线以使其正常工作

jquery - 在特定链接上扩展搜索栏

ruby on rails 作用域连接表

python - 如何更改函数中变量的范围? Python

javascript - 我可以从另一个文件访问变量吗?