我写了两个函数,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
参数
答案 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));
var callback = function (num) {
return function(){
return num + 1;
};
}
var fn = function (callback) {
return callback();
}
console.log(fn(callback(5)));