標籤:優先順序 逗號 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