繁体   English   中英

Javascript吊装及全球scope报关

[英]Javascript hoisting and global scope declaration

在 javascript 中,编译阶段找到所有声明并将其与其适当的范围相关联。

情况1

a = 2;
console.log(a);

如果不在严格模式下使用,则假定片段实际上被处理为:

var a;
a = 2;
console.log(a);

Output:2

案例2

如果声明发生在 console.log() 下面

  console.log(a); 
  var a = 2;

在第 1 行:编译器将在其 scope 中检查 a 的声明,如果未找到,则全局 scope 将分配一个并再次假设相同的代码与

   var a; 
   console.log(a);
   a = 2;

Output: undefined // 因为解释器读取控制台时没有赋值

案例3

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM