在javascript中對於this指向的再次理解

來源:互聯網
上載者:User

標籤:function   win   console   log   重載   變數   為什麼   無法   argument   

總所周知,function () {}函數體內的this對象指向的是調用該函數的對象,那麼我們看一下這個例子

<script>var length = 3;function fn () {  console.log(this.length)}fn();</script>

  函數調用是在最外層發生的,那麼由於全域對象this的存在,那麼函數體內的this指向的就是window對象。

在瀏覽器環境下,全域變數和window對象的屬性是等價的,所以定義了length全域變數就相當於向window對象

添加了一個length屬性。即上面代碼的輸出結果是3

下面我們再看一個例子

<script>var length = 10;function fn() {  console.log(this.length);}function test(fn) {  fn();  arguments[0]();}test(fn, 3);</script>

  第一個輸出的結果是10,大家應該都知道。第二個的輸出結果是2!!!為什麼呢?這裡還要強調上面說的那句話

function () {}函數體內的this對象指向的是調用該函數的對象。在function函數體內的有一個很神奇的對象arguments

這個對象是由調用該函數時所傳的實參決定的,而不是由定義函數時由形參決定的。這一點也是javascript語言廣為詬病的一

點,無法依據定義函數的形參個數來實現方法的重載,只能靠argumengs的length屬性來實現。所以在上面例子中,fn 和 3

這兩個變數都掛載在arguments對象下面,還由於arguments是一個類數組對象所以它有length屬性,也可以像使用數組一樣

來使用arguemnts。即可以arguments[0]指向arguments的第一個屬相,在上例中就指向了fn函數,fn函數體內的this就指向

了arguments對象,所以第二次列印出2!!!

在javascript中對於this指向的再次理解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.