1

callbackによって呼び出される2 つの関数を記述しfnます。

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

fn(callback(5));

firebug は私に教えてください: ,コールバックがすぐに実行されることを知っています。関数内の num を返すときnumber is not a functionにそれを実行させるにはどうすればよいですか?関数はパラメーターのみを許可しますfnfnfncallback

4

4 に答える 4

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 に答える
1

2番目の関数が実際に必要ないため、あなたの例はあまり良くありません。しかし、これは私がまったく同じことをすることです:

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

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

コールバックは通常、オブジェクト コンテキスト (DOM 要素、イベントが処理されるときなど) で呼び出されることを確認すると、オブジェクトのコンテキストで呼び出される引数として渡されたコールバック関数を呼び出すことができます。

クロージャは最初は少し気が遠くなり、理解するのが難しいですが、YouTube で Douglas Crockford との素晴らしいビデオがいくつかあり、その仕組みをよく説明しています。

于 2012-06-29T05:04:19.233 に答える
0

それを呼び出すと、5 + 1を-callbackに戻し、無効なJavaScriptです。fn6()

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

callback提供された引数に 1 を追加する関数を返すように変更できます。

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

ここで、呼び出すと、数値ではなく関数callback()が返されます。返された関数は、「factory」関数に渡した数値にアクセスでき、呼び出されるたびその数値に 1 を加えた値を返します。したがって:

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 に答える