JavaScript中的'这是可变状态吗?

问题描述 投票:1回答:1

一个人可以将this视为运行时设置的隐式变量。如果可以将其设置为不同的值,则可能会影响函数的行为并返回值,从而使函数不纯。在下面的示例中,objOne.addTwo函数仅调用另一个纯函数,但是由于this可以更改。

示例

const objOne = {
  getTwo: () => 2,
  addTwo: function (num) {
    return num + this.getTwo();
  }
}
const objTwo = {
  getTwo: () => 3
}
console.log(objOne.addTwo(2)); // Returns 4
console.log(objOne.addTwo.call(objTwo, 2)); // Returns 5 instead of 4

问题

作为原则,this应该被视为“可变状态”吗?

javascript functional-programming
1个回答
0
投票

这是IMO的一个哲学问题。我认为这取决于您对mutable state的理解。从docs中读取:

无法在执行过程中通过赋值进行设置,并且每次调用该函数时可能会有所不同。

这清楚地说明了在函数执行过程中无法设置this,但根据调用函数的方式,它可能有所不同。因此,如果我们正在谈论重新分配this,则不,它不是可变状态,因为设置后无法更改其值。但是我们可以通过不同地调用函数来更改它。

您可以通过以不同的方式调用this来了解更改here的那些方法。

© www.soinside.com 2019 - 2024. All rights reserved.