gpt4 book ai didi

JavaScript 工厂函数修改闭包范围外的变量

转载 作者:行者123 更新时间:2023-11-30 09:12:02 27 4
gpt4 key购买 nike

为什么变量“OnDone”在工厂范围内保持不变?

const foo = () => {
let OnDone = null;

const Do = function() {
console.log(OnDone);
if (typeof OnDone === 'function')
OnDone();
}

return {
Do,
OnDone
};
}


let f = foo();
f.OnDone = () => {
console.log('OnDone');
};

f.Do();

输出空值。 https://jsfiddle.net/xe4j9hmc/6/

最佳答案

let onDone = nullfoo 函数范围内定义一个变量 onDone 不是属性,但是当你这样做时

f.onDone 它将值添加到 f 上的 onDone 属性,可以使用 this.onDone 访问但在您的代码中,您使用的 onDone 仍然引用在本地范围内定义的 onDone


你可能想这样做

function foo(){
this.OnDone = null;

const Do = function() {
console.log(this.OnDone);
if (typeof this.OnDone === 'function')
this.OnDone();
}

return {Do, onDone:this.OnDone};
}


let f = new foo();
f.OnDone = () => {
console.log('OnDone');
};

f.Do();

关于JavaScript 工厂函数修改闭包范围外的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57895567/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com