混淆javascript回调函数

时间:2012-06-29 04:52:44

标签: javascript callback

我写了两个函数,callback将调用fn

var callback = function (num) {
        return num + 1;    
}
var fn = function (callback) {
    callback();
}

fn(callback(5));
萤火虫告诉我:number is not a function,我知道回调是立即执行的,我如何让它在fn中执行,返回fn函数中的num fn 1}} function仅允许callback参数

4 个答案:

答案 0 :(得分:1)

你的例子不太好,因为没有实际需要第二个功能。但这就是我所做的一切:

function makeCallback(num)
{
    return function()
    {
        return num+1;
    }
}

fn = function (callback)
{
    callback.apply(this);
}

看到回调通常在对象上下文中调用(DOM元素,当处理事件时等)您可能想要调用回调函数,您作为参数传递以在对象的上下文中调用。

闭包有点令人生畏,一开始很难理解,但有关道格拉斯克罗克福德的一些精彩视频在youtube上有关此问题,这真的很好地解释了他们的运作

答案 1 :(得分:1)

callback(5)不是函数,只是结果值。所以.. callback()是必须的功能。

var callback = function (num) {
        return function(){
                return num + 1;
        };    
}
var fn = function (callback) {
    return callback();
}

fn(callback(5));

答案 2 :(得分:0)

当您致电callback时,它会向fn返回5 + 1 - 而6()是无效的JavaScript。

callback(5) === 6
fn(callback(5)) === fn(6)
fn(6) === 6()

您可以修改callback以返回一个向所提供的参数添加一个的函数:

var callback = function(num) {
    return function() {
        return num + 1;
    };
}

现在,当你致电callback()时,它会返回一个函数而不是一个数字 - 返回的函数可以访问你传入“factory”函数的数字以及每当被称为它将返回该数字,加上一个。因此:

callback(5) === function() { var num = 5; return num + 1; }
fn(callback(5)) === fn(function() { var num = 5; return num + 1; })
fn(function() { var num = 5; return num + 1; }) === (function() { var num = 5; return num + 1; })()

答案 3 :(得分:-1)

由于参数命名而发生。您使用参数的方式是调用名为6()的函数,该函数最终不正确。

所以,请使用以下内容(IMO,这是您正在尝试的内容)

var callback = function (num) {
        return num + 1;    
}
var fn = function (num) {
    callback(num);
}

fn(callback(5));

Demo

到目前为止,您尝试创建回调函数。您只缺少函数中的return语句,请参阅结果。

var callback = function (num) {
        return function(){
                return num + 1;
        };    
}
var fn = function (callback) {
    return callback();
}

console.log(fn(callback(5)));

Demo