是否可以在 JavaScript 中更改闭包内的变量?

Som*_*Guy 7 javascript closures

假设我有以下内容:

(function() {
  let myVar = 300;
  window.myFunc = function() {
    console.log(myVar);
  };
})();
Run Code Online (Sandbox Code Playgroud)

在不改变上面代码的情况下,你能想出一种方法来改变变量吗myVar?我的意思是从外部来看,你能做这样的事情吗:

window.myFunc.__closure__.myVar = 10;
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Ele*_*Ele 4

不,这是不可能的,因为变量的范围是函数的块。

修改闭包内部某些内容的唯一方法是通过当前词法上下文(在本例中为window对象)中的属性。

(function() {
  this.myVar = this.myVar || 300;
  window.myFunc = function() {
    console.log(myVar);
  };
})();

myVar = "Ele";
myFunc();
Run Code Online (Sandbox Code Playgroud)