是否可以使用调用动态定义函数的静态函数?我需要这个,因为我不能改变静态函数,我所知道的是它调用动态函数。例如:
function staticFunc() {
dynamicFunc();
}
function test() {
function dynamicFunc() {console.log('yay');}
staticFunc();
};
test();
但它给了我错误dynamicFunc is not defined
。
我知道,如果我在staticFunc
中对test()
进行硬编码,则可行。我还注意到,当我调用staticFunc
时,我只收到错误,而不是在我定义它时(即使dynamicFunc
尚未定义),这使得staticFunc
似乎在内部运行test()
的范围,但显然不是。
有什么办法吗?我能想到的唯一方法是创建一个全局函数funcPtr
,它被赋值给我的动态函数。
答案 0 :(得分:2)
关闭是您可以在子级别范围中使用父级别范围的变量。在你的情况下反过来你已经在子级别范围内初始化一个函数,并尝试在父范围内调用它,这是不正确的。
您可以将当前函数作为参数传递并调用它:
function staticFunc(dynamicFunc) {
dynamicFunc();
}
function test() {
var dynamicFunc = function() {console.log('yay');}
staticFunc(dynamicFunc);
};
test();
答案 1 :(得分:1)
试试这个:
var dynamicFunc = null;
function test() {
dynamicFunc = function () {console.log('yay');}
staticFunc();
};
考虑到您无法更改 static 函数的任何内容,解决方案会将dynamicFunc
的声明更改为包含函数的var。
如果静态函数尝试在其dynamicFunc
时调用null
,则会抛出异常。但你可以这样声明:
var dynamicFunc = function() {};