覆盖Javascript中函数的回调

时间:2014-08-10 15:45:05

标签: javascript namespaces scope override

是否可以覆盖函数内的回调?

function fn() {
    function cb() {
        console.log("Overriden");
    }
}

function cb() {
    console.log("Original");
}

据我所知,fn中的cb成为局部变量。因此,当任何其他函数调用cb时,它们仍将获得原始函数。有没有办法覆盖回调?

编辑:下面是实际代码。

module.exports = function(app, passport, async) {

    var isLoggedIn = function (req, res, next) {
        if (req.isAuthenticated())
             return next();
        res.redirect('/');
    };

    app.get('/info', isLoggedIn, function(req, res) {              
        res.render('info.ejs', {message: req.flash('loginMessage')});
    });

    app.post('/add', isLoggedIn, function(req, res) {
        process.nextTick(function() {            
            // do something here
            isLoggedIn = function(req, res, next) {
                console.log("Modified"); 
            }; 
            res.redirect('/info');
        });         
    });
}

1 个答案:

答案 0 :(得分:0)

cb函数上下文中的fn函数是一个只能在该上下文中调用的本地函数。因此,如果您调用fn函数,然后调用cb,即。 fn(); cb();,然后将调用全局cb而不是本地cb

回调是一个函数,它作为参数传递给另一个函数,并在操作完成时执行。所以你的代码应该是:

function fn(callback) {
    // do something
    if (typeof callback === 'function') {
        callback();
    } else {
       cb();
    }
}

function cb() {
    console.log("Original");
}

fn(); // "Original"

fn(function() {
    console.log("Overriden");
}); // "Overriden"