JavaScript运行环境
JavaScript的运行环境有两个,一个是浏览器,一个是Node.js。今天来探讨一下不同运行环境下,JavaScript对于全局变量的设置有何不同。
首先先看看在浏览器环境下,全局变量的设置
// 浏览器
var someValue = 'test123';
(function(){console.log(this.someValue)})();
// output: test123
很简单的一个逻辑,自执行匿名函数输出this.someValue的值,函数作用域内没找到,所以向上查找,来到了全局作用域,成功输出this.someValue的结果。这个代码同理还有很多不同的写法:比如不给someValue前缀,就是默认将它设置为全局变量;或者用window.someValue,同样是将变量设置为全局变量。
// 两种不同的写法
someValue = 'test123';
window.someValue = 'test123';
但是,在Node.js环境下,事情就变的有些不同
同样的写法,放到Node.js环境下会发生什么?
// Node.js
var someValue = 'test123';
(function(){console.log(this.someValue)})();
// output: undefined
结果变成了undefined。如果你这时尝试输出一下全局对象,可以发现someValue并没有绑定在全局对象上,这是因为JavaSript在不同环境下的全局对象不同的。
在浏览器环境下,JavaScript的全局对象是window,所以我们可以通过window.someValue=‘’的方式为其赋值,而Node.js环境下的全局对象是global,我们想在Node.js环境下设置全局变量就需要使用global.someValue=""的方式。
我们试着把代码改成如下,发现函数终于可以输出预测结果了:
// Node.js
global.someValue = 'test123';
(function(){console.log(this.someValue)})();
// output: test123
另外,在两个运行环境下,有个通用的设置全局变量的方法,那就是不给变量设置前缀
someValue = 'test123';
(function(){console.log(this.someValue)})();
// Node.js output: test123
// 浏览器 output: test123
总结
浏览器环境下设置全局变量:
window.someValue = 'test123';
var someValue = 'test123';
someValue = 'test123';
Node.js环境下设置全局变量:
global.someValue = 'test123';
someValue = 'test123';
TIP:碰到自己无法理解的运行结果,可以试着先看看自己的运行环境,分析是否是环境差异导致的问题。
版权声明:本文为qc15867301542原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。