猿问

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

假设我有以下内容:


(function() {

  let myVar = 300;

  window.myFunc = function() {

    console.log(myVar);

  };

})();

在不更改上述代码的情况下,您能想到一种更改myVar变量的方法吗?我的意思是从外面说,您能做些什么:


window.myFunc.__closure__.myVar = 10;

这可能吗?


暮色呼如
浏览 248回答 3
3回答

慕雪6442864

不,这是不可能的,因为变量的范围是函数的块。修改闭包内部内容的唯一方法是通过当前词法上下文(在本例中为window对象)中的属性。(function() {  this.myVar = this.myVar || 300;  window.myFunc = function() {    console.log(myVar);  };})();myVar = "Ele";myFunc();

慕哥9229398

您可以定义一个全局函数来更改变量:(function() {  let myVar = 300;  window.myFunc = function() {    console.log(myVar);  };  window.setMyVar = value => {    myVar = value;  };})();myFunc();setMyVar(10);myFunc();或者您可以返回setMyVar:const setMyVar = (function() {  let myVar = 300;  window.myFunc = function() {    console.log(myVar);  };  return value => {    myVar = value;  };})();myFunc();setMyVar(100);myFunc();

泛舟湖上清波郎朗

使用闭包的想法是使变量只能在特定范围内访问。如果要在此范围之外进行更改,为什么不使用类呢?例如。class myClass {  constructor(var) { this._var = var }  set var(arg) { this._var = arg }  yourFunc() { console.log(this._var) }}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答