遇到一道題目,寫出下面的輸出:
數組
結果以下:ide
第一個是child's name沒有問題,第二個指定的也是child,依然是child's name,第三個和第二個其實是同樣的,(parentObj.child=parentObj.child)至關於(parentObj.child),都是函數名,第四個又是什麼鬼呢。函數
逗號運算符是不多見的,查了資料才知道,使用逗號運算符時,先計算左操做數的值,再計算右操做數的值,最後返回右操做數的值。所以,(parentObj.child,parentObj.child)和前三個都是同樣的。逗號運算符的優先級在JavaScript中是最低的,若是使用要用括號包起來,否則容易出錯。然而,我以爲逗號運算符不多被使用。this
《JavaScript高級程序設計(第3版)》上有這麼一個例子:spa
結果爲:設計
書上的解釋是,賦值表達式和逗號表達式的值是函數自己,this的值不能獲得維持。3d
再看一個在網上找的例子瞭解this的用法:對象
結果是blog
fn();以後爲何this.length是10呢,由於fn這個函數是在全局定義的,fn函數的this指向的是Window,如你所見。ip
大道理我都懂,arguments[0]();又是什麼鬼?
arguments是JavaScript的一個內置對象,注意它並非一個數組,而是對象。
因此arguments[0]是想找到key爲0的value,這個value就是函數名fn,由於它是第一個參數,好了,那這裏fn的this就只能指向argument了,由於fn自己沒有length這個變量,往外面找就找到arguments了。arguments裏面有個length屬性,不信我展開最後的function給你看:
好了,真相大白,此時this.length爲1,length表示的應該就是參數的個數了,這裏只有fn,爲1。