Javascript闭包:动态定义函数,从当前作用域调用方法
Javascript closure: dynamically-defined functions, call method from current scope
是否可能有一个静态函数调用一个动态定义的函数?我需要这个,因为我不能改变静态函数,我只知道它调用了动态函数。例如:
function staticFunc() {
dynamicFunc();
}
function test() {
function dynamicFunc() {console.log('yay');}
staticFunc();
};
test();
但是它给了我错误dynamicFunc is not defined
我知道,如果我硬编码staticFunc
在test()
,它的工作。我还注意到,我只得到错误时,我调用staticFunc
,而不是当我定义它(即使dynamicFunc
还没有定义),这使得它看起来像staticFunc
运行在test()
的范围内,但显然不是。
有什么办法吗?我能想到的唯一方法是使一个全局函数funcPtr
被分配给我的动态函数。
闭包是你可以在子级范围内使用父级范围的变量。在你的情况下,它是相反的,你在子级作用域中初始化一个函数,并试图在父级作用域中调用它,这是不正确的。
您可以将当前函数作为参数传递并调用它:
这里是Demo
function staticFunc(dynamicFunc) {
dynamicFunc();
}
function test() {
var dynamicFunc = function() {console.log('yay');}
staticFunc(dynamicFunc);
};
test();
试试这个:
var dynamicFunc = null;
function test() {
dynamicFunc = function () {console.log('yay');}
staticFunc();
};
考虑到你不能改变你的静态函数的任何内容,解决方案将dynamicFunc
的声明更改为一个包含函数的var。
如果静态函数在调用null
时试图调用dynamicFunc
,则会抛出异常。但是你可以这样声明:
var dynamicFunc = function() {};
小提琴。
相关文章:
- 调用私有作用域
- Javascript作用域和Ajax调用;工作不正常
- 直接在DOM事件处理程序中调用作用域函数的最短方法是什么
- AngularJS:如何调用指令中定义的函数'控制器的作用域
- 从匿名函数调用mouseover函数时失去作用域
- Javascript-在全局作用域中调用本地函数/属性
- 从$http.get调用更新Angular作用域变量
- $uibModal从windowTemplate调用作用域函数
- 函数内部的作用域调用函数
- 角度:创建可以调用作用域函数的自定义指令
- 从另一个文件调用时出现Javascript作用域错误
- 从对象中调用的函数是否可以访问该对象的作用域
- AngularJS:从作用域调用$watchGroup
- 如何将从外部作用域调用的方法存根到被测函数
- AngularJs指令:在模板中从父作用域调用方法
- AngularJS从指令中的祖先作用域调用方法
- 从作用域调用控制器方法
- 从另一个作用域调用函数
- 如何从角作用域调用外部控制器
- Javascript闭包:动态定义函数,从当前作用域调用方法