JavaScript中逗號運算子和this

來源:互聯網
上載者:User

標籤:優先順序   逗號   this   

遇到一道題目,寫出下面的輸出:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6F/D4/wKioL1WqNTrzBr2dAAErXTaksLM774.jpg" title="pic1.png" alt="wKioL1WqNTrzBr2dAAErXTaksLM774.jpg" />

結果如下:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6F/D4/wKioL1WqNdizNEN-AABALOyVSeI532.jpg" title="pic2.png" alt="wKioL1WqNdizNEN-AABALOyVSeI532.jpg" />

    第一個是child‘s name沒有問題,第二個指定的也是child,依然是child‘s name,第三個和第二個實際上是一樣的,(parentObj.child=parentObj.child)相當於(parentObj.child),都是函數名,第四個又是什麼鬼呢。

    逗號運算子是很少見的,查了資料才知道,使用逗號運算子時,先計算左運算元的值,再計算右運算元的值,最後返回右運算元的值。因此,(parentObj.child,parentObj.child)和前三個都是一樣的。逗號運算子的優先順序在JavaScript中是最低的,如果使用要用括弧包起來,不然容易出錯。然而,我覺得逗號運算子很少被使用。

    

    再看一個在網上找的例子瞭解this的用法:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6F/D4/wKioL1WqPmbzsrElAAC9FUsxOlQ326.jpg" title="pic3.png" alt="wKioL1WqPmbzsrElAAC9FUsxOlQ326.jpg" />

    結果是

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6F/D4/wKioL1WqPzzywxa8AABPl0eGjMA546.jpg" title="pic4.png" alt="wKioL1WqPzzywxa8AABPl0eGjMA546.jpg" />

    fn();之後為什麼this.length是10呢,因為fn這個函數是在全域定義的,fn函數的this指向的是Window,如你所見。

    大道理我都懂,arguments[0]();又是什麼鬼?

    arguments是JavaScript的一個內建對象,注意它並不是一個數組,而是對象。

    所以arguments[0]是想找到key為0的value,這個value就是函數名fn,因為它是第一個參數,好了,那這裡fn的this就只能指向argument了,因為fn本身沒有length這個變數,往外面找就找到arguments了。arguments裡面有個length屬性,不信我展開最後的function給你看:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6F/D4/wKioL1WqQdPD1PjXAABb2I_fa0w923.jpg" title="pic5.png" alt="wKioL1WqQdPD1PjXAABb2I_fa0w923.jpg" />

    好了,真相大白,此時this.length為1,length表示的應該就是參數的個數了,這裡只有fn,為1

    

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.