javascript連續(xù)賦值問題
前幾天在搜索面試題時發(fā)現了這么一段代碼,執(zhí)行完后感覺完全不與所想的一樣
var a = { n : 1 }; var b = a; a.x = a = {n : 2}; console.log(a.x); console.log(b.x);
輸出結果為:
undefined
[object Object]
一開始以為語句應該是先給 a 賦值 {n : 2} , 然后再將 a.x 賦值 {n : 2} ;
但事實卻不是那樣,于是改動了一下代碼,添加幾條log
var test; var a = { get test () { console.log("call a get"); return test; }, set test (value) { console.log("call a set"); test = value; } } var test2; var b = { get test2 () { console.log("call b get"); return test2; }, set test2 (value) { console.log("call b set"); test2 = value; } } a.test = { n : 1 }; b.test2 = a.test; console.log("begin"); a.test.x = a.test = {n : 2};
這樣,在begin后邊,這條賦值到底執(zhí)行了什么就一目了然了.
這是語句執(zhí)行時打印的log
先觸發(fā)了一次get,然后觸發(fā)了一次set.
本人猜想,該條語句執(zhí)行的順序為,先將左邊變量取出,然后執(zhí)行賦值.(在執(zhí)行該條語句前,先將對象引用取出,然后從右到左執(zhí)行賦值)
以上所述就是本文的全部內容了,希望大家能夠喜歡
相關文章
利用CSS、JavaScript及Ajax實現圖片預加載的方法
預加載圖片是提高用戶體驗的一個很好方法,實現圖片預加載可以使用css、JavaScript、Ajax三種方法。下面逐一給大家介紹利用CSS、JavaScript及Ajax實現圖片預加載的方法,需要的朋友參考下吧2016-11-11BootStrap點擊保存后實現模態(tài)框自動關閉的思路(模態(tài)框)
這篇文章主要介紹了BootStrap點擊保存后實現模態(tài)框自動關閉的思路(模態(tài)框),需要的朋友可以參考下2017-09-09JavaScript代碼輕松實現網頁內容禁止復制(代碼簡單)
有些時候我們寫的內容不想被別人復制,在代碼中怎么實現的呢?下面小編給大家介紹javascript代碼輕松實現網頁內容禁止復制,感興趣的童鞋一起看看吧2015-10-10javascript實現的一個自定義長度的文本自動換行的函數。
javascript實現的一個自定義長度的文本自動換行的函數。...2007-08-08