2016-11-10 3 views
1

私は雄弁なjavascriptでこの例を見て、この関数がどのように動作するのか不思議でした。誰かがこれを私に説明してもらえますか?javascriptの関数...ドットを結ぶのを助けてください

function multiplier (factor) { 

    return function(number){ 

     return number * factor; 

     }; 
} 
var twice = multiplier(2); 
console.log((twice(5)); 
    // 10 

私は、パラメータ係数倍(5)について混乱= 2
イムとどのようにそれがパラメータ番号になりに従うことができると思います。多分それはあなたが

function multiplier (factor) { 

    function inner(number){ 
    return number * factor; 
    }; 

    return inner; 
} 
var twice = multiplier(2); 
console.log((twice(5)); 

を理解するのに役立ちます

+0

あなたは新しい関数を返す関数を呼び出します – Endless

+0

@Endless私もそれを見ました。私は彼らが理解するためにOPのために十分に似ているとは確信していません – mplungjan

+0

Multiplierはクロージャと呼ばれるものを作成し、これは次に無名関数を返します。ここの賢いことは、javascriptがfactor変数を取得したことです。だからあなたの例では、2に設定された因数を持つ無名関数に2倍に等しい。 – Keith

答えて

0

乗算器は、入力として要因を受け付ける関数です。

関数を返します。返された関数は入力として数値を受け取り、その数値に係数を乗じて返します。

は少し異なって記述されていますが、乗数は数を何らかの係数で乗算できる関数を作成します。入力として番号を受け付け、返す関数を返すその数倍2

var twice = multiplier(2); 

multiplier(2)を呼び出す例えば

multiplier(2) 

これは一例であり

function twice(number){ 
    return number * 2; 
} 
+0

ありがとうございます。 – john

1

と同じですJavaScriptの 'クロージャ'の言っ

var twice = function(number){ 
    return number * 2; 
}; 

だから二回二回裏、あなたがそれに送る値をあなたに与える関数への参照次のようになります。

var twice = multiplier(2) 

は本当に言って同じです。

倍数関数は、係数(この場合は2)に「クロージャ」を持つfunction(number){...}を返します。

あなたがtwice(5)を呼び出すとき、あなたは10

の結果を得るなぜあなたが閉鎖にまで読みたいと思うでしょうです:あなたが理解するためにhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures

+0

トレヴァーありがとう。あなたの例は本当に物事をクリアするのを助けました。追加の背景情報については、ドキュメントを読みました。 – john

+0

あなたはようこそ! – trevor

0

最も重要な事実は、乗算器は、Aを返すということです関数(クロージャ)では、関数を作成する関数です。そして、返された関数は、あなた自身が定義した関数と同じように、パラメータを値に置き換えて機能します。

function inner(number){ 
return number * 2; 

}

2倍は内側と同じように動作しますが、代わりに5を使用します(この例では2回前に余分な括弧があります)。

私の意見では、これはJavascript(スコープチェーン)の最も混乱しやすい側面の1つで、他の言語の仕組みとは異なるためです。しかし、あなたがここに投稿したようないくつかの簡単な例を理解していれば、それ以降は同様のコードを読むのは簡単です。

+0

ありがとうございました。 – john

関連する問題