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