我想定义一个函数:
const f = (outside, param1, param2) => {
outside(param1, param2);
}
但是我知道这个函数将总是在一个函数内部被调用,它有外部作为参数。例如:
const g = (outside, param3, param4) => {
// some code here
f(outside, var1, var2);
// some more code
}
是否有任何方法来定义f
,以便我不需要在g
内部调用时将outside
传递给它?
我还希望能够在其他以outside
为参数的函数中调用f
,而不仅仅是g
。
是否有任何方法来定义
f
,以便我不需要在g
内部调用时将outside
传递给它?
。你要求使用动态作用域,但是JavaScript使用词法作用域。这意味着可用性/能见度的符号是由函数定义,不是如何/何时/何地。
您可以更改参数的顺序并根据它们的存在采取操作:
const f = (param1, param2, outside) => {
if (outside) {
outside(param1, param2);
} else {
...
}
}
不幸的是,在函数g之外定义的函数不能直接访问函数g中包含的变量。因此,必须将参数传递给函数f。
如果你这样改变你的逻辑呢?它能满足你的需要吗?
// Set function logic
const f = (param1, param2) => {
return param1 + param2;
}
// Outside method
const outside = v => {
console.log(`I'm outside: ${v}`);
}
// Call from outside logic
const g = (outside, param3, param4) => {
// If you know, that it is outside wrapper, wrap it here
outside(f(param3, param4));
}
g(outside, 2, 2);
// Call from else logic
console.log(`I'm else logic: ${f(3, 3)}`);