なぜ次のように機能するのですか?
function sum(a,b) { return a + b; }
var result = sum.call(null,3,4); // 7
結果が定義されるのはなぜですか?nullの方法としてsumを呼び出しています。ただし、nullはオブジェクトではなく、プロパティを持つことはできません。
何が起こっている?
なぜ次のように機能するのですか?
function sum(a,b) { return a + b; }
var result = sum.call(null,3,4); // 7
結果が定義されるのはなぜですか?nullの方法としてsumを呼び出しています。ただし、nullはオブジェクトではなく、プロパティを持つことはできません。
何が起こっている?
の最初の引数Function.prototype.call
はcontextthis
です。これは、呼び出された関数の実行コンテキストの値を定義します。それ以外は何もありません。
つまり、基本的には(少なくとも、ES5 strictモードでは)this
参照していると言っていますが、とにかくアクセスしないので、違いはありません。null
this
非厳密モードでは、this
はできません。そのため、代わりにグローバルオブジェクトnull
に置き換えられます。
.call
or .apply
with null
orを使用すると、厳密モードでない場合は、代わりにundefined
デフォルトthis
(通常は)が自動的に使用されます。window
MDN(強調鉱山)から:
thisArg
this
の呼び出しに提供される の値fun
。これは、メソッドで見られる実際の値ではない可能性があることに注意してください。メソッドが非厳密モードコードの関数でnull
ありundefined
、グローバルオブジェクトに置き換えられ、プリミティブ値がボックス化される場合。
厳密モードの場合、実際にはまたはnull
になりますundefined
。
(function() {
'use strict';
return this;
}).call(null); // null
(function() {
'use strict';
return this;
})(); // undefined
そうではありません。この場合のNULLは、this
キーワードがどのオブジェクトにバインドされるかを指定します。メソッドでは、NULLに設定することにより、this
変数バインディングがないか、関数自体またはウィンドウにバインドされます。
を介してアクセスされる変数や関数を使用していthis
ないため、呼び出しメソッドを使用する必要はありません...使用するだけです。sum(3,4)
たとえば、MDNで述べられているように、最初の引数は
この値は、[メソッド]の呼び出しに提供されます。これはメソッドから見た実際の値ではない可能性があることに注意してください。メソッドが非厳密モードコードの関数である場合、nullおよびundefinedはグローバルオブジェクトに置き換えられ、プリミティブ値はボックス化されます。
MDNが説明したように。
thisArg
これの価値は、楽しみへの呼びかけに提供されました。これはメソッドで見られる実際の値ではない可能性があることに注意してください。メソッドが非厳密モードコードの関数である場合、nullおよびundefinedはグローバルオブジェクトに置き換えられ、プリミティブ値はボックス化されます。
簡単なコードでそれを置くだけです。
<script >
'use strict'
function fun() {
alert(this);
}
fun.call(null);
</script>
厳密モードでは、これはnullです。ただし、厳密ではないモードでは。これはウィンドウまたはグローバルオブジェクトです。