2017-10-05 15 views
1

私はJavascriptの例題を見つけましたが、正当化にかなり満足していないか、または関数内でthisの範囲で混乱しています。以下の例を参照してください:2回目のfn関数呼び出しで出力が2になるのはなぜですか?

var length = 10; 
function fn() { 
    console.log(this.length); 
} 

var obj = { 
    length: 5, 
    method: function(fn) { 
    fn(); 
    arguments[0](); 
    } 
}; 

obj.method(fn, 1); 

初めて10は、それがグローバルスコープから呼ばれているので、理解している記録されます。しかし、2回目は2が記録されています。私は答えを探して、これは私が得たものである -

我々は、引数[]配列を使用したJavaScript 機能で任意の数の引数にアクセスできることを知っています。

したがって、arguments0はfn()を呼び出すだけです。今FN内では、この機能の スコープはarguments配列、および引数の 長さをログになり、[]を返します2

誰もがこの1に、より良い答えを持っていますか?

答えて

0

あなたはthisの値は、したがって、argumentsと同じであるarguments[0]();

を呼び出します。

引数は次のとおりです。fn, 1

それらの2があります。

arguments.lengthですので、2です。

+0

それは、関数の呼び出し側でありスコープ/ブロックと呼ばれることではありません。 – dhawal

+1

この場合。はい。 Scopeは 'this'の値とは関係ありません(あなたが作成したスコープから' this'の値をコピーする矢印関数を使わない限り)。 – Quentin

+0

入手しました。これを覚えておいてください。 「これは簡単ではない;) – dhawal

関連する問題