JavaScript中逗號運算符和this

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

wKioL1WqNTrzBr2dAAErXTaksLM774.jpg

結果以下:ide

wKioL1WqNdizNEN-AABALOyVSeI532.jpg

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

    逗號運算符是不多見的,查了資料才知道,使用逗號運算符時,先計算左操做數的值,再計算右操做數的值,最後返回右操做數的值。所以,(parentObj.child,parentObj.child)和前三個都是同樣的。逗號運算符的優先級在JavaScript中是最低的,若是使用要用括號包起來,否則容易出錯。然而,我以爲逗號運算符不多被使用。this

    《JavaScript高級程序設計(第3版)》上有這麼一個例子:spa

wKiom1W5w7GifHwqAADXeC3CDbc458.jpg

    

    結果爲:設計

wKioL1W5xd3iUGD1AAAU8XUAeug967.jpg

    書上的解釋是,賦值表達式和逗號表達式的值是函數自己,this的值不能獲得維持。3d


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

wKioL1WqPmbzsrElAAC9FUsxOlQ326.jpg

    結果是blog

wKioL1WqPzzywxa8AABPl0eGjMA546.jpg

    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給你看:

wKioL1WqQdPD1PjXAABb2I_fa0w923.jpg

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

相關文章
相關標籤/搜索