普通宣告的變數為什麼沒有在原型鏈上?

時間 2021-07-10 20:56:51

1樓:不要熬夜啊

這個你得去問布蘭登·艾克,為什麼要把ECMAScript設計成這樣。不過雖然宣告的變數沒有在原型鏈上,但是我們卻有可能從原型鏈上獲取變數。

在JS中,變數儲存在活動物件(AO)裡面,活動物件組成作用域鏈,獲取變數時會沿著作用域鏈解析。

如果AO是有原型的,那麼識別符號(變數)的解析就會變成二維的。識別符號二維解析指的是,在作用域鏈中,每遇到乙個AO(或VO),如果AO本身解析不了這個識別符號,那麼JS引擎不會立即解析作用域鏈上的下乙個AO,而是先嘗試從當前AO的原型鏈上解析。

一般來說,AO(或VO)是沒有也不應該有原型的,但是在某些情況下AO是有原型的,這個時候就會進行二維解析。

舉個例子,全域性物件也是乙個VO,同時全域性物件最終是繼承自Object的(即全域性物件有原型)。所以如果乙個識別符號從作用域鏈上解析,一直到全域性物件也解析不了,那麼JS引擎會從全域性物件的原型鏈上解析這個識別符號。

Object.prototype.x = 'hello';

function test()

test();

其它類似的例子還有早期SpiderMonkey中命名函式表示式的特殊物件繼承自Object,以及黑莓瀏覽器的活動物件繼承自Object等。

c 在宣告結構指標變數的時候,會分配記憶體嗎?

瀉藥!函式clone沒有在堆上動態分配記憶體。struct S const structS clone structS R const structS bar structS R 生成中間表示式 struct.S type define arm aapcscc dereferenceable 1 s...

為什麼php在向mysql提交資料時變數外要用單引號?

擼程式碼的鄉下人 s ss mysql query INSERT INTO Comment comment,date,username,signature VALUES s NOW 111 signature 等於 s ss s1 INSERT INTO Comment comment,date,u...

為什麼很多「鬼」的原型,在現實中往往屬於弱勢群體?

月卿何為 越是柔弱,被欺負後積怨越深.不要欺負弱勢群體 我想了乙個身邊的例子,當時初中住宿學校,有乙個同班男生,性格溫柔內斂學習中上,班裡有幾個小混混類男孩子經常欺負他,他也是笑哈哈就過去了從不生氣!於是這種欺負變本加厲,我是親歷者所以印象深刻.有一天中午吃完飯我沒有回宿舍和同桌在教室趴著午睡,這個...