1. 程式人生 > >call和apply的第一個引數是null/undefined時函式內的的this指向window或global

call和apply的第一個引數是null/undefined時函式內的的this指向window或global

call/apply用來改變函式的執行上下文(this),它們的第一個引數thisArg是個物件,即作為函式內的this。

多數時候你傳啥函式內就是啥。僅以call示例

1 2 3 4 5 6 7 functionfun() { 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' functionfun() { alert(this); } fun.call(null)     
// null fun.call(undefined)// undefined

須注意!