遇到一道題目,寫出下面的輸出:
<a href="http://s3.51cto.com/wyfs02/M00/6F/D4/wKioL1WqNTrzBr2dAAErXTaksLM774.jpg" target="_blank"></a>
結果如下:
<a href="http://s3.51cto.com/wyfs02/M01/6F/D4/wKioL1WqNdizNEN-AABALOyVSeI532.jpg" target="_blank"></a>
第一個是child's name沒有問題,第二個指定的也是child,依然是child's name,第三個和第二個實際上是一樣的,(parentObj.child=parentObj.child)相當于(parentObj.child),都是函數名,第四個又是什麼鬼呢。
逗号運算符是很少見的,查了資料才知道,使用逗号運算符時,先計算左操作數的值,再計算右操作數的值,最後傳回右操作數的值。是以,(parentObj.child,parentObj.child)和前三個都是一樣的。逗号運算符的優先級在JavaScript中是最低的,如果使用要用括号包起來,不然容易出錯。然而,我覺得逗号運算符很少被使用。
《JavaScript進階程式設計(第3版)》上有這麼一個例子:
<a href="http://s3.51cto.com/wyfs02/M00/70/97/wKiom1W5w7GifHwqAADXeC3CDbc458.jpg" target="_blank"></a>
結果為:
<a href="http://s3.51cto.com/wyfs02/M02/70/94/wKioL1W5xd3iUGD1AAAU8XUAeug967.jpg" target="_blank"></a>
書上的解釋是,指派表達式和逗号表達式的值是函數本身,this的值不能得到維持。
再看一個在網上找的例子了解this的用法:
<a href="http://s3.51cto.com/wyfs02/M02/6F/D4/wKioL1WqPmbzsrElAAC9FUsxOlQ326.jpg" target="_blank"></a>
結果是
<a href="http://s3.51cto.com/wyfs02/M00/6F/D4/wKioL1WqPzzywxa8AABPl0eGjMA546.jpg" target="_blank"></a>
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給你看:
<a href="http://s3.51cto.com/wyfs02/M00/6F/D4/wKioL1WqQdPD1PjXAABb2I_fa0w923.jpg" target="_blank"></a>
好了,真相大白,此時this.length為1,length表示的應該就是參數的個數了,這裡隻有fn,為1。
本文轉自 iampomelo 51CTO部落格,原文連結:http://blog.51cto.com/iampomelo/1675918,如需轉載請自行聯系原作者