2016-05-10 15 views
0
function add (x) { 
    return function (y) { 
    return x + y; 
    }; 
    } 
var add5 = add(5); 
var no8 = add5(3); 
alert(no8); // Returns 8 

誰かが私に何か説明してもらえますか?y?どのように関数の最初の呼び出しを追加するは5を返しますか? yまたは何を無視しますか?このadd(x)関数はどのように機能しますか?

+0

最初の呼び出しを関数を返します。以前に質問されました。うまくいけば、誰かが詐欺を見つけるのに良い時間を持っていることを望みます。 – epascarello

+0

関数 'add'は数字xをとり、1つの引数(' y'と指定する)を受け入れて 'x'に加える*関数*を返します。したがって、 'var add5 = add(5)'は引数に5を加える関数を返します。 'var no8 = add5(3)'は引数3でその関数を呼び出します。 – lurker

答えて

1

これはクロージャと呼ばれています。つまり、ネスト機能で状態を維持できます。

この場合、最初の手順では5をadd()に渡して、状態(渡された番号)を保存し、その番号を使用している関数を返します。内部関数は、最初の呼び出しが終了した後でもその番号を知っています。

ここで詳しく読むことができます。

https://developer.mozilla.org/en/docs/Web/JavaScript/Closures

関連する問題