前幾天在搜尋面試題時發現了這麼一段**,執行完後感覺完全不與所想的一樣
1輸出結果為:var a =;
4var b =a;
5 a.x = a = ;
6console.log(a.x);
7 console.log(b.x);
undefined
[object object]
一開始以為語句應該是先給 a 賦值 , 然後再將 a.x 賦值 ;
但事實卻不是那樣,於是改動了一下**,新增幾條log
var這樣,在begin後邊,這條賦值到底執行了什麼就一目了然了.test;
var a =,
set test (value)
}var
test2;
var b =,
set test2 (value)
}a.test =;
b.test2 =a.test;
console.log("begin");
a.test.x = a.test = ;
這是語句執行時列印的log
先觸發了一次get,然後觸發了一次set.
本人猜想,該條語句執行的順序為,先將左邊變數取出,然後執行賦值.(在執行該條語句前,先將物件引用取出,然後從右到左執行賦值)
上圖來自
乙個關於js 優化的問題
在我們遍歷陣列 for 迴圈的時候,通常習慣的寫法是這樣 for var i 0 i myarray.length i 但是在這段 中,有乙個十分明顯的問題,就是每次在迴圈的時候,都會計算一邊 myarray.length 的值,這就意味著每次都要實時查詢dom,而dom的操作又是十分昂貴的。在這個...
關於js的prototype乙個問題
今天寫了乙個例子,先寫了乙個js檔案 hello.js helloworld function helloworld.prototype function saywelcome function 然後在另乙個htm檔案中hello.html 引用這個js檔案 hello world 這樣做,會報乙個...
乙個變數賦值的小問題
create table a a varchar 10 insert into a select a insert into a select a insert into a select b insert into a select b insert into a select c insert ...