前端學習(36)~js學習(十三):this
- 2020 年 3 月 18 日
- 筆記
解析器在調用函數每次都會向函數內部傳遞進一個隱含的參數,這個隱含的參數就是this,this指向的是一個對象,這個對象我們稱為函數執行的 上下文對象。
根據函數的調用方式的不同,this會指向不同的對象:【重要】
- 1.以函數的形式調用時,this永遠都是window。比如
fun();
相當於window.fun();
- 2.以方法的形式調用時,this是調用方法的那個對象
- 3.以構造函數的形式調用時,this是新創建的那個對象
- 4.使用call和apply調用時,this是指定的那個對象
箭頭函數中this的指向:
ES6中的箭頭函數並不會使用上面四條標準的綁定規則,而是會繼承外層函數調用的this綁定(無論this綁定到什麼)。
類數組 arguments
在調用函數時,瀏覽器每次都會傳遞進兩個隱含的參數:
- 1.函數的上下文對象 this
- 2.封裝實參的對象 arguments
例如:
function foo() { console.log(arguments); console.log(typeof arguments); } foo();

arguments是一個類數組對象,它可以通過索引來操作數據,也可以獲取長度。
arguments代表的是實參。在調用函數時,我們所傳遞的實參都會在arguments中保存。有個講究的地方是:arguments只在函數中使用。
1、返回函數實參的個數:arguments.length
arguments.length可以用來獲取實參的長度。
舉例:
fn(2,4); fn(2,4,6); fn(2,4,6,8); function fn(a,b) { console.log(arguments); console.log(fn.length); //獲取形參的個數 console.log(arguments.length); //獲取實參的個數 console.log("----------------"); }
打印結果:

我們即使不定義形參,也可以通過arguments來使用實參(只不過比較麻煩):arguments[0] 表示第一個實參、arguments[1] 表示第二個實參…
2、返回正在執行的函數:arguments.callee
arguments裡邊有一個屬性叫做callee,這個屬性對應一個函數對象,就是當前正在指向的函數對象。
function fun() { console.log(arguments.callee == fun); //打印結果為true } fun("hello");
在使用函數遞歸調用時,推薦使用arguments.callee代替函數名本身。
3、arguments可以修改元素
之所以說arguments是偽數組,是因為:arguments可以修改元素,但不能改變數組的長短。舉例:
fn(2,4); fn(2,4,6); fn(2,4,6,8); function fn(a,b) { arguments[0] = 99; //將實參的第一個數改為99 arguments.push(8); //此方法不通過,因為無法增加元素 }