關於乙個js連續賦值問題之我見 詞略窮,見諒

2022-02-08 19:30:00 字數 788 閱讀 8707

前幾天在搜尋面試題時發現了這麼一段**,執行完後感覺完全不與所想的一樣

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

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 = ;

這樣,在begin後邊,這條賦值到底執行了什麼就一目了然了.

這是語句執行時列印的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 ...