重构JavaScript回调-函数超出名称空间

问题描述 投票:1回答:2

我有一个像这样的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固定为参数的唯一方法吗?

谢谢大家!

javascript node.js express parameters callback
2个回答
0
投票

您需要将par1提供给function c()作为参数。否则无法使其干净]


0
投票

您可以使用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));
© www.soinside.com 2019 - 2024. All rights reserved.