發表文章

目前顯示的是有「hoisting」標籤的文章

javascript- hoisting介紹

圖片
hoisting(提升) 什麼是hoisting? W3school:Hoisting is JavaScript's default behavior of moving declarations to the top 在 JavaScript 裡面,如果你試圖去對一個還沒宣告變數取值,會發生以下錯誤 console.log(a) // ReferenceError: a is not defined 但如果你這樣寫,會發生神奇的事 console.log(a) // undefined var a 而這種現象稱為hoisting,var a被提升到最上面了(但這只是想像,實際上程式碼並不會移動) 可以想像成這樣: var a console.log(a) // undefined a = 5 你可以把var a = 5這句話分成兩個步驟,第一個階段是宣告變數:var a,第二個階段是賦值:a = 5,只有前面的變數宣告會被提升,賦值不會。 補充 : 定義變項的過程中 , 可以分成宣告 ( declaration ) 和給值 ( initialization ) 兩個過程 , 只有declaration的內容會在逐行執行程式前先被執行並儲存在記憶體中 ( hoisted ); 給值的內容則是在hoisted後 , 執行程式時 , 才會被執行到 。 換句話說: JavaScript 僅提升宣告的部分,而不是初始化。如果在使用該變數後才宣告和初始化,那麼該值將是 undefined MDN說明 小結: 變數宣告跟函式宣告都會提升 ,但僅有宣告會提升(賦予值)並不會。  接著我們來做個比較,在全域中宣告變數,看順序是否影響結果 A: js 第三行,因為沒有載入宣告變數的值所以出現 undefined        js 第五行 正常顯示值為10        js第六行  沒有定義var b,所以出現b is not defined畫面 補充一下函式宣告和函式運算式差異 這兩種定義方式最大的...