为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

暮色呼如 2021-04-26 12:14:52
假设我有以下内容:(function() {  let myVar = 300;  window.myFunc = function() {    console.log(myVar);  };})();在不更改上述代码的情况下,您能想到一种更改myVar变量的方法吗?我的意思是从外面说,您能做些什么:window.myFunc.__closure__.myVar = 10;这可能吗?
查看完整描述

3 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

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


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


(function() {

  this.myVar = this.myVar || 300;

  window.myFunc = function() {

    console.log(myVar);

  };

})();


myVar = "Ele";

myFunc();


查看完整回答
反对 回复 2021-05-06
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

您可以定义一个全局函数来更改变量:


(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();


查看完整回答
反对 回复 2021-05-06
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

使用闭包的想法是使变量只能在特定范围内访问。如果要在此范围之外进行更改,为什么不使用类呢?


例如。


class myClass {

  constructor(var) { this._var = var }

  set var(arg) { this._var = arg }


  yourFunc() { console.log(this._var) }

}


查看完整回答
反对 回复 2021-05-06
  • 3 回答
  • 0 关注
  • 247 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信