gpt4 book ai didi

javascript - 将函数存储到数组会导致范围问题

转载 作者:行者123 更新时间:2023-12-03 03:57:47 26 4
gpt4 key购买 nike

我正在尝试将一些函数存储到数组中。我想实现这样的目标:

    class Store {
constructor(){
this.storage=[];
}
}
let store1=new Store();
let store2=new Store();

(function (store1) {
store1.storage.push({"func1":function () {func2();}})
})(store1);

(function (store2,store1) {
store2.storage.push({"func2":function () { console.log('func2');}})
let func2 = function () { console.log('func2');}
let func1= store1.storage[0].func1
// let func1= function () {func2();}
func1();


})(store2,store1);

问题是它抛出“func2未定义”,因为我认为是范围问题。

有没有办法保持这个代码结构或行为?我需要存储这样的函数。

最佳答案

无需更改太多代码的最简单方法是创建一个命名空间,例如:

class Store {
constructor(){
this.storage=[];
}
}
let commons = {};
let store1=new Store();
let store2=new Store();

(function (store1) {
store1.storage.push({"func1":function () {commons.func2();}})
})(store1);

(function (store2,store1) {
store2.storage.push({"func2":function () { console.log('func2');}})
commons.func2 = function () { console.log('func2');}
commons.func1= store1.storage[0].func1
// let func1= function () {func2();}
commons.func1();
})(store2,store1);

我不确定您的确切用例,但也许您应该考虑将这些方法放入类中或以在同一范围内定义函数的方式重组代码?

关于javascript - 将函数存储到数组会导致范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44858842/

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