是否可以覆盖函数内的回调?
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');
});
});
}
答案 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"