[英]Javascript hoisting and global scope declaration
在 javascript 中,编译阶段找到所有声明并将其与其适当的范围相关联。
a = 2;
console.log(a);
如果不在严格模式下使用,则假定片段实际上被处理为:
var a;
a = 2;
console.log(a);
Output:2
如果声明发生在 console.log() 下面
console.log(a);
var a = 2;
在第 1 行:编译器将在其 scope 中检查 a 的声明,如果未找到,则全局 scope 将分配一个并再次假设相同的代码与
var a;
console.log(a);
a = 2;
Output: undefined // 因为解释器读取控制台时没有赋值
console.log(a);
a = 2;
Output:参考错误
为什么这会引发引用错误而不是未定义?
隐式全局变量并不意味着var
语句。 没有吊装它们。
如果仔细查看前两种情况,您总是在声明变量a
,而在 JavaScript 中,只有声明被提升。
话虽如此,在您的Case 3
中,变量a
从未声明过,因此,这里无法进行提升。 因此,在 scope 中没有名为a
的变量,因此没有ReferenceError
。
如果您查看ReferenceError的描述,它会显示:
ReferenceError object 表示引用了不存在的变量时的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.