3 回答

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

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

TA贡献1818条经验 获得超3个赞
使用闭包的想法是使变量只能在特定范围内访问。如果要在此范围之外进行更改,为什么不使用类呢?
例如。
class myClass {
constructor(var) { this._var = var }
set var(arg) { this._var = arg }
yourFunc() { console.log(this._var) }
}
添加回答
举报