我有一个像这样的Javascript函数:
function a(par1) {
fun.doSth(function(par2) {
another.doSth(function() {
//par1 is needed here
})
})
}
现在,它确实可以这样工作,我可以在第二个回调中访问par1。但是我想重构一下,使两个匿名函数命名为函数,以提高可读性
function a(par1) {
fun.doSth(b)
}
function b(par2) {
another.doSth(c)
}
function c() {
//par1 is needed here
}
但是现在par1不再可用,我想是因为c超出了a的范围?是通过这些函数将传递的par1固定为参数的唯一方法吗?
谢谢大家!
您需要将par1提供给function c()
作为参数。否则无法使其干净]
您可以使用currying
:
function doSomething1(cb1) {
cb1(1);
}
function doSomething2(cb2) {
cb2(2);
}
function a(par1) {
doSomething1(b(par1))
}
function b(par1) {
return function (par2) {
doSomething2(c(par1))
}
}
function c(par1) {
return function c(arg) {
console.log('arg: ', arg, 'par1: ', par1);
}
}
console.log(a(0));