面试官:在全局作用域下声明的变量一定会成为Global对象的属性吗?

我心飞翔 分类:javascript

全局变量在浏览器和Node环境下的区别

我们知道,在JavaScript中声明的全局变量,会变成Global对象的属性。这个Global对象在浏览器中为window对象,在Node环境下为global对象。

看下面这段简单的代码:

var name = 'jack'
console.log(this.name) //输出什么?
 

根据上面的分析,显然会打印出jack。

我们用Chrome试一下。在这里插入图片描述
确实没错。

按理说,在Node环境下,应该也是相同的结果。

我们试下:
在这里插入图片描述
结果似乎出人意料:同样的代码,在浏览器和Node环境下,竟然出现了不同的结果。

从上面的测试代码我们可以看出:用 var 声明的变量,在浏览器环境下会成为window对象的属性,而在Node环境下不会成为global对象的属性。

那如果用 let 呢?是和 var 表现一样,还是有所区别?

用 let 声明的全局变量不会成为window对象的属性

《JavaScript高级程序设计》里写得很清楚:

与var关键字不同,使用 let 在全局作用域中声明的变量不会成为window对象的属性。

例如:

var name = 'Matt'在这里插入代码片
console.log(window.name) // 'Matt'

let age = '26'
console.log(window.name) //undefined
 

我们也可以直接将window打印出来:
在这里插入图片描述
可以看到,window对象里的确只有用 var 声明的变量。

总结

  1. 使用 var 声明的全局变量,在浏览器环境下会成为window对象的属性,在Node环境下不会成为global对象的属性。
  2. 使用 let 声明的全局变量,即便在浏览器环境下不会成为window对象的属性。

作者:掘金-面试官:在全局作用域下声明的变量一定会成为Global对象的属性吗?

回复

我来回复
  • 暂无回复内容