2017-12-22 7 views
0

以下の例の単純な2層のcurryingでは、dogという語がy引数に渡されます。なぜ外部で、開始機能が最も内側の機能のように見えるのですか?

"use strict"; 
 

 
function layer2(x) { 
 
    return function(y) { 
 
     return console.log(x, y); 
 
    } 
 
} 
 

 
var layer1 = layer2('cat'); 
 

 
layer1('dog');

私はそれがこのように動作する知っていると私は確実にこれを再現することができます。しかし、私はこれがなぜ機能するのかを理解できません。私が100レイヤーのサンプルを作成した場合、レイヤー1は最も内側の関数になり、パターンはそのポイントから外側に働きます。これを引き起こす基本的なメカニックは何ですか?どんな入力でもありがとう!

+0

投稿を2度読んだが、何が問題なのかまだ分かっていない。もう少し詳しくお聞かせください – Rajesh

+0

関数をカリングするためのjavascriptのクロージャの概念を利用しています – ricky

+2

JavaScriptのクロージャはどのように機能しますか?(https://stackoverflow.com/questions/111102/how-do- – Rajesh

答えて

2

要するに、これを可能にするのはレキシカルスコープです。ここで重要なポイントは、関数を返しますストアたら、x値が設定されており、決して変わらないということです

y - its own argument 
x - parameter passed into `layer2` function 

:あなたの例ではlayer2関数はその範囲内の2つの変数を持つ別の関数を返す、参照してください。ここでもあなたの例では、​​変数に格納されている関数 - layer2('cat')の結果はxの名前が 'cat'文字列値にバインドされています。

+1

回答する代わりに閉じてください。あなたが解決策を知っているので、適切な詐欺を見つける可能性がより高くなります。 – Rajesh

+1

私は、これが別の質問であると考えました - 「クロージャは何ですか」ではなく「カリングが可能になる」。私の閉会投票は拘束力があります(この問題はすぐに終了します)。私はあなたのコメントを強調しましたが、閉鎖の仕組みを理解することは、カリングがJSでどのように機能するかを理解するうえで重要です。 – raina77ow

+0

この質問に対する2つの回答は私を非常に助けてくれました!私は閉鎖の概念を理解し、それがどのようにこれに当てはまるかを見ることができます。しかし、これらの答えが出るまでは、私はそれを全く考えていませんでした。本当にありがとう! – DR01D

2

簡単です。

function(y) { 
    return console.log(x, y); 
} 

さて、layer1('dog')を返す関数xがコールlayer2('cat')に既に受信されているコールreturn console.log(x,y);、およびyはfunction(y)から呼び出されている:あなたはlayer2('cat')を呼び出すと、関数を返します。

非常に良いブログhttps://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/がありますので、さらにお手伝いします。

+0

返信する代わりに閉じてください。あなたが解決策を知っているので、より良い詐欺を見つける可能性が高くなります。 – Rajesh

+0

それは完璧な意味があります!今、リターンがどのように後退しているのかを見ることができます。本当にありがとう!私は今リンクを読むでしょう。 – DR01D

関連する問題