函数可以在Javascript中修改“ this”对象吗?

时间:2019-04-18 08:09:57

标签: javascript node.js

遵循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中运行

2 个答案:

答案 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对象,这就是为什么它不相等的原因