Node和浏览器环境下的全局this
Node和浏览器环境下的全局this
在浏览器环境里,使用const
和let
都不会把变量添加到windows全局对象里,但是使用var
会。
浏览器环境里,在最外层定义一个函数,其内部的this
就是windows对象
function fn(){
this.num = 10
}
fn();
console.log(this); // windows
console.log(this.num) // 10
但在Node里,就不是这样了
function fn(){
this.num = 10
}
fn();
console.log(this); // {}
console.log(this.num) // undefined
console.log(global.num) // 10
Node环境里,函数内部的this
指向global对象,而不是全局的那个真正的this
。
全局的this
是个空对象。
console.log(this) // {}
function fn(){
console.log(this) // Object [global]
}
事实上如果理解CommonJS模块化概念的话,这个问题就很好理解了,由于一个js文件就是一个模块,所以全局的this
实际上指向的是这个模块的module.exports
,默认情况下这个module.exports
一开始就是一个空对象,没有任何导出的成员。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!