假设我有以下内容:
(function() {
let myVar = 300;
window.myFunc = function() {
console.log(myVar);
};
})();
在不更改上述代码的情况下,您能想到一种更改myVar
变量的方法吗?我的意思是从外面说,你能做些什么吗?
window.myFunc.__closure__.myVar = 10;
这可能吗?
答案 0 :(得分:2)
否,不可能,因为变量的范围是函数的块。
修改闭包内部内容的唯一方法是通过当前词法上下文中的属性(在这种情况下为window
对象)。
(function() {
this.myVar = this.myVar || 300;
window.myFunc = function() {
console.log(myVar);
};
})();
myVar = "Ele";
myFunc();
答案 1 :(得分:1)
您可以定义一个全局函数来更改变量:
(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();
答案 2 :(得分:0)
使用闭包的想法是使变量只能在特定范围内访问。如果要在此范围之外进行更改,为什么不使用类呢?
例如
class myClass {
constructor(var) { this._var = var }
set var(arg) { this._var = arg }
yourFunc() { console.log(this._var) }
}