遵循MDN:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
如果不处于严格模式,则函数中的“ this”将指向全局对象。
但是,当尝试在函数中修改全局变量时,它却没有我想象的那样。有什么解释或规范可以参考吗?
// this.somevariable = 'this is in global var'; // will not be in Global
somevariable = 'this is in global var'; // will make it to global
function something() {
somebar = 'foo'; // this will not change the global variable
this.somebar = 'foo'; // this will not change the global variable
console.log(this.somevariable);
}
something();
console.log( this.somebar ); // somebar undefined
P.S我只是想弄清楚'this'关键字的工作方式。我了解修改全局变量以及不使用严格模式都是一个坏主意。
*在节点v10.14中运行
答案 0 :(得分:2)
如果函数不是boxed,则this
是草率模式下的全局变量,而undefined
是函数内的严格模式下的全局变量。
this
是指Node.js模块范围中的模块对象(module.exports
)。
区别在于this
在这里引用了一个模块:
console.log(this.somebar); // this === module.exports
并在此处引用全局变量:
console.log(this.somevariable); // this === global
答案 1 :(得分:-1)
我认为这个例子可以向大家解释:
// in node
function somethingNode() {
console.log(global === this);
}
// in Browser
function somethingBrowser() {
console.log(window === this);
}
somethingNode(); // true
somethingBrowser(); // true
在最后一个字符串中,您引用module.exports
对象,这就是为什么它不相等的原因