重构 javascript 回调 - 在命名空间之外运行
Refactoring javascript callbacks - function out of namespace
我有一个 Javascript 函数,如下所示:
function a(par1) {
fun.doSth(function(par2) {
another.doSth(function() {
//par1 is needed here
})
})
}
现在,它确实像这样工作,我可以在第二个回调中访问 par1。但我想重构一下,将两个匿名函数命名为 functions 以提高可读性
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));
我有一个 Javascript 函数,如下所示:
function a(par1) {
fun.doSth(function(par2) {
another.doSth(function() {
//par1 is needed here
})
})
}
现在,它确实像这样工作,我可以在第二个回调中访问 par1。但我想重构一下,将两个匿名函数命名为 functions 以提高可读性
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));