call和apply的第一個引數是null/undefined時函式內的的this指向window或global
阿新 • • 發佈:2019-02-13
call/apply用來改變函式的執行上下文(this),它們的第一個引數thisArg是個物件,即作為函式內的this。
多數時候你傳啥函式內就是啥。僅以call示例
1 2 3 4 5 6 7 |
function fun()
{
alert( this );
}
fun.call(1);
fun.call( 'a' );
fun.call( true );
fun.call({name: 'jack' });
|
分別彈出“1”、“a”、“true”、“[object Object]”。
有兩種情況需要注意,傳null或undefined時,將是JS執行環境的全域性變數。瀏覽器中是window,其它環境(如node)則是global。
1 2 |
fun.call( null ); //
window or global
fun.call(undefined); //
window or global
|
這在ECMAScript5.1 15.3.4.4中有解釋,如下
嚴格模式下情況又有所不同,ES3比較寬容儘量去揣測程式碼意圖。ES5嚴格模式(ie6/7/8/9除外)則不再揣測,給call/apply傳入的任何引數不再轉換。如下
1 2 3 4 5 6 |
'use
strict'
function fun()
{
alert( this );
}
fun.call( null ) //
null
fun.call(undefined) //
undefined
|
須注意!