1

我编写了两个函数,callback将由以下函数调用fn

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

fn(callback(5));

萤火虫告诉我:number is not a function,我知道回调是立即执行的,我怎么能让它执行在返回函数fn中的num,函数只允许参数fnfncallback

4

4 回答 4

1

您的示例不是很好,因为实际上不需要第二个功能。但这就是我所做的一切:

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

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

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

闭包一开始有点令人生畏且难以理解,但在 youtube 上有一些与 Douglas Crockford 合作的精彩视频,这些视频很好地解释了他们的工作原理

于 2012-06-29T05:04:19.233 回答
1

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

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

fn(callback(5));
于 2012-06-29T05:17:31.990 回答
0

当你调用callback它时,它返回 5 + 1 到fn- 并且6()是无效的 JavaScript。

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

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

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

现在,当您调用callback()它时,它会返回一个函数而不是一个数字 - 返回的函数可以访问您传递给“工厂”函数的数字,并且无论何时调用它都会返回该数字加一。因此:

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; })()
于 2012-06-29T04:55:16.827 回答
-1

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

所以,使用以下(IMO,这就是你正在尝试的)

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

fn(callback(5));

演示

到目前为止,您尝试创建一个回调函数。您只在函数中缺少一个 return 语句查看结果。

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

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

演示

于 2012-06-29T04:57:48.257 回答