javascript:创建全局变量的本地范围会在设置之前取消定义它

标签 javascript scope closures local undefined

我不明白这种行为:

var a = 1;
console.log('a is undefined1:', a == undefined);
var a;

//iterate selected jQuery elements:
jQuery.each(this, function(index, htmlElement) {
    console.log('a is undefined2:', a == undefined);
    var a;

返回:
 a 未定义1: false
  a 未定义2:true

如果最后一行(var a;)被注释掉,则返回:
 a 未定义1: false
 a 未定义2:错误

我总是期望后者的输出。我不知道什么?

非常感谢!

最佳答案

var a 放入函数内会创建一个作用域为该函数的不同 a 变量。

由于您没有为其分配值,因此它是未定义的。

当您将其注释掉时,您正在测试值为 1 的外部 a

变量被提升。无论您在函数中的哪个位置使用 var foo,该函数的 foo 仍然适用于整个函数。

关于javascript:创建全局变量的本地范围会在设置之前取消定义它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5603254/

相关文章:

C++/结构范围

spring - 如何覆盖范围 bean 进行测试?

scala - 为什么下面的 Scala 函数被称为闭包?

javascript - 闭包的返回值未定义

javascript - Leaflet.Draw 使用 GeoJson 保存数据

javascript - 将 UTC 日期转换为日期时间字符串 Javascript

java - 在 do{} 中初始化的变量不递增

javascript - Grunt 设置任务选项并使用新值运行该任务

Javascript setInterval 似乎很慢?

VB.Net - "With"和闭包不混合