// var 定義的變數會進行變數提升,宣告被拿到函式或全域作用域的頂端,并輸出 undefined // 函式宣告也會進行提升,var 的變數提升會覆寫函式宣告提升 console.log("=====0======") var fn = function () { console.log("fn0-1") } fn() var fn = function () { console.log("fn0-2") } fn() function fn() { console.log("fn0-3") } fn() function fn() { console.log("fn0-4") } fn() // fn0-1 // fn0-2 // fn0-2 // fn0-2 console.log("=====1======") try { fn1() } catch (error) { console.log(error) } var fn1 = function () { console.log("fn1-1") } // Uncaught TypeError: fn1 is not a function console.log("====2=======") // 函式宣告會提升,可以直接在函式定義之前執行函式,后面定義的函式宣告會覆寫前面的函式宣告 function fn2() { console.log("fn2-1") } fn2() function fn2() { console.log("fn2-2") } fn2() // fn2-2 // fn2-2 console.log("=====3======") fn3() // 函式宣告提升,走最后一個函式宣告的結果 var fn3 = function () { console.log("fn3-1") } function fn3() { console.log("fn3-2") } fn3() // var 宣告提升覆寫函式宣告提升 function fn3() { console.log("fn3-3") } fn3() // var 宣告提升覆寫函式宣告提升 // fn3-3 // fn3-1 // fn3-1 console.log("=====5======") var fn5 = function () { console.log("fn5-1") } fn5() var fn5 = function () { console.log("fn5-2") } fn5() // fn5-1 // fn5-2 // 總結:函式運算式相對于函式宣告的一個重要區別是函式宣告在代碼決議階段就會被提升(函式宣告提升),而函式運算式則需要在賦值陳述句執行到達時才會創建函式物件
參考:https://juejin.cn/post/7237051958993469496
推薦:看 《你不知道的 JavaScript》,里面有詳細的 js 執行細節,看完很有識訓,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/554610.html
標籤:其他
下一篇:返回列表
