延續上次説的執行環境,今天來說一下大名鼎鼎的提升現象,常常聽到它但也總是霧煞煞,直到我看了三明治這本書,不小心好像有點看懂它到底是啥,於是把我的理解筆記下來。
由於函式宣告會將整個內容同時存取於記憶體中,因此在宣告式前呼叫該函式是可行的
console.log(hello)
//hello is not defined
function loop(n){
if (n>1) {
logEvenOrOdd(--n)
}
}
function logEvenOrOdd(n) {
console.log(n, n % 2 ? 'Odd' : 'Even')
loop(n)
}
loop(10)
我們在loop裡面呼叫logEvenOrOdd,在logEvenOrOdd裡面也呼叫loop,如果我們沒有 hoisting,那以上的程式碼就不可能達成,因為你不可能同時做到 A 在 B 上面而 B 又在 A 上面。
所以為什麼我們需要 hoisting?就是為了要解決上面的問題。
基本上我目前認為提升的重點就是函式因為JavaScript預設行為是連內容一併存取進記憶體的關係,所以可以在宣告前被呼叫,也因為這樣的關係,可以讓函式互相呼叫,今天意外的收穫是原來我原本的理解是有錯的,我本來以為提升只有發生在函式宣告,今天筆記時越看越不對,重複看了幾遍書才發現,他要說的是不管變數宣告還是函式宣告都有提升,只是其他變數宣告就算提升也只是undefined(對應var)或是is not defined(對應const&let),我就先把這放一旁,甚至const&let的提升連提都沒提XD主要是我目前從文章中只知道他們也同樣有提升但提升行為跟var不一樣,但今天的理解量用完了,腦袋空轉中,留待下次探索。
努力看完天書後,來點輕鬆的吧!分享我兒子的童言童語,調劑身心一下
2022/07/05
那個週末帶他去剃了他想要的光頭
像馮迪索一樣光的光頭
剃完回學校上學的第ㄧ天晚上
咖:媽媽,講我今天很棒的事!
我:你今天頂著大光頭去上課超勇敢的啊!
咖:我又不能拿下來