­

前端學習(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);  //此方法不通過,因為無法增加元素      }