2016-08-30 12 views
6

私は現在、javascriptのコースに従っていて、例の1つでJavaScriptのシーンの裏に何が起こっているのかを理解しています(下記のコードを参照)。難解な時間を理解するjavascriptの例

私はほとんどのコードを理解し、なぜログ出力が - > [false、true、true]であるのか理解しています。しかし、私にナットを駆動している一つの部分がある(私は一番下のコードでは、それの横にある矢印を指摘):

私の混乱がパラメータ 1を中心に展開

:パラメータ1テイクを何旅

checkPastLimitSimplified(1)で渡された瞬間からvar arr5 = mapForEach(arr1, checkPastLimitSimplified(1));になります。

checkPastLimitSimplified(1)が呼び出されたとき、パラメータ1が変数環境にあるこの関数に対して実行コンテキストが作成されることを理解します。

しかし、どうなりますか? checkPastLimitSimplified関数内の関数はまだ実行されていませんが、ただ返されます。それが返されたとき、それはどのように見えますか?どの時点でlimiter変数がパラメータ1を受け取るのですか?

私は.bind(this, limiter);がその機能のコピーを作成することを理解します。そのlimiter変数は既に返される前に1ですか?

function mapForEach(arr, fn) { 

    var newArr = []; 
    for (var i = 0; i < arr.length; i++) { 
    newArr.push(
     fn(arr[i]) 
    ) 
    }; 

    return newArr; 
} 

var arr1 = [1, 2, 3]; 

var checkPastLimitSimplified = function(limiter) { // < ----CONFUSED 
    return function(limiter, item) { 
    return item > limiter; 
    }.bind(this, limiter); 
}; 

var arr5 = mapForEach(arr1, checkPastLimitSimplified(1)); 
console.log(arr5); 

答えて

4

関係を確認するために、変数の名前を変更できます:

var checkPastLimitSimplified = function(outer_limiter) { 
    return function(limiter, item) { 
    return item > limiter; 
    }.bind(this, outer_limiter); 
}; 

bindはちょうどfunction(item)リターンの前にする関数のシグネチャを変更します。
クライアントコードがcheckPastLimitSimplified(1)(item)を呼び出す場合、リミッタはバインドされたコンテキストから置き換えられます。それをより理解するために

+0

これを正しく理解すれば、 'checkPastLimitSimplified(1)'を呼び出すことによって関数に渡される 'outer_limiter'パラメータはavailbleであり、関数が返される前に.bindで解決されますか? 本質的に 'function(1、item){ return item> limiter; } 'が返されますか?だから 'return'はこの時点で.bind()の実行を止めませんか? – Yapartase

+0

もちろん、 'return'は' function()。bind() '式全体に関係します。 –

0

別の方法は、外側内側の関数を入れている:

var checkPastLimit = function(limiter, item) { 
    return item > limiter; 
}; 

var checkPastLimitSimplified = function(outer_limiter) { 
    return checkPastLimit.bind(this, outer_limiter); 
}; 

結果は、既に定義された最初のパラメータ(リミッタ)との最初の関数のコピーであろう。

この新しい関数では、2番目のパラメータ(item)のみが必要です。

ただし、この段階で機能コードの実行(制限との比較)はありません。

関連する問題