2016-09-28 7 views
-1

コールバック関数についてある程度理解しています。匿名コールバック関数

function finalGuy(x) { 
    alert("Final Number: " + x); 
} 

function secondGuy(x, callback) { 
    x = x - Math.sqrt(x); 
    callback(x); 
} 

function firstGuy(callback) { 
    var x = parseInt(prompt("Enter a number")); 
    x *= x; 
    secondGuy(x, callback); 
} 


firstGuy(finalGuy); 

このようなものに直面したときしかし、私はそれを把握するように見えることはできません:たとえば、私は完全にこのことを理解しています。

a(function() { 
    b(function() { 
     c() 
    }) 
}); 

コールバックの最初のシーケンスを2番目のような実際の例に変換できますか?具体的には、最初の例で行ったのと同じように、次のコールバックに1つの結果を渡します。

+0

希望の結果を追加してください。 –

+0

@ NinaScholz私は、2番目のブロックの結果が最初のブロックの結果、または同様のものを模倣したかったのです。 –

+0

コードは、 'a'、' b'、 'c'関数を知らなくても意味することは難しいです。 –

答えて

2

これら二つを使用して、第二の例では、関数宣言を通過する最初の例で

function acceptCallback(callback) { 
    callback(); 
} 

function callback() { 
    console.log('callback invoked'); 
} 

acceptCallback(callback); // => 'callback invoked' 

function acceptCallback(callback) { 
    callback(); 
} 

acceptCallback(function() { 
    console.log('callback invoked'); 
}); 

同じ結果を生成無名関数を渡す

01別のコールバックに渡されるコールバックの範囲で操作、別名「コールバック地獄」ここで特別

何も実行

3は、それが最初の2つの例と同じ構文です。誰にでも読めるのは難しいです。

function first(callback) { 
    callback('from first'); 
} 

function second(callback) { 
    callback('from second'); 
} 

function third(callback) { 
    callback('from third'); 
} 

function fourth(n, callback) { 
    callback(n * 10); 
} 

first(function(fromFirst) { 
    var a = 5; 
    console.log(fromFirst); // 'from first' 
    second(function(fromSecond) { 
    console.log(fromSecond); // 'from second' 
    third(function(fromThird) { 
     console.log(fromThird); // 'from third' 
     var b = a + 5; // 10 
     fourth(b, function(fromFouth) { 
     console.log(a, b, fromFourth); // 5, 10, 100 
     }) 
    }); 
    }); 
}); 
+0

したがって、1つの匿名関数から2つめの匿名関数に結果を正しく渡すにはどうすればよいですか?私が間違っていることは分かりませんが、元のブロックと同じ操作で無名関数を使用しようとすると、定義されていないNaNが返されるか、関数が警告されます。 –

+0

例えば、私の最初の例では、ある数値に対していくつかの演算を行い、それに対してもう少し操作を行う2番目の関数に渡し、それを表示する3番目の関数に渡す関数を持っています。匿名関数を使用してサンプルを修正して、これをどのように行うことができるかを示すことができますか? –

+0

@GDに別の例が追加されました。とにかく、そのようなコードを書いてはいけません。理由を見るために "コールバック地獄"を検索してください。 –