是否有任何方法可以在两个闭包之间共享代码?股份关闭代码(javascript)
例子:
// ANTIPATTERN
var cbDoThing = function cbDoThing(arg){
return typeof closed1 +" " + arg;
}
function getClosure1(closed1) {
return cbDoThing;
}
function getClosure2(closed1) {
return function(arg) {
// do other work
return cbDoThing(arg);
}
}
f1 = getClosure1();
f1("ARG1"); // returns "undefined ARG1"
f2 = getClosure2();
f2("ARG2"); // returns "undefined ARG2"
这里getClosure1()
和getClosure2()
返回关闭,做类似的任务。即他们都需要在关闭环境中执行cbDoThing()
,但getClosure2()
另外运行一些其他代码。
上面的例子不像想象的那样工作。 cbDoThing()
是在全局上下文中定义的,所以closed1变量未定义。想要的行为是一种模式,可以从闭合范围链中读取closed1变量,但不需要在每个闭包中重新定义函数cbDoThing()
。
编辑: 现在,我问,一个答案来找我稍作修改:
var cbDoThing = function cbDoThing(closed1, arg){
return closed1 +" " + arg;
}
function getClosure1(closed1) {
return function(arg) {
return cbDoThing(closed1, arg);
}
}
function getClosure2(closed1) {
return function(arg) {
// do other work
return cbDoThing(closed1, arg);
}
}
的cbDoThing不从封闭的可变范围内访问封式变量。而是通过一个额外的论据。然后从每个闭包中调用该函数。
这就是它(因为这是没有办法让从主叫封闭的封式)! – devundef