iT邦幫忙

2021 iThome 鐵人賽

DAY 26
0
Modern Web

前端幼鳥三十天養成記系列 第 26

預編譯:函數聲明 vs 函數表達式

  • 分享至 

  • xImage
  •  

function 預編譯:函數聲明 vs 函數表達式

fun1();  //1
fun2();  //Uncaught TypeError: fun2 is not a function

//function聲明
function fun1(){console.log(1)};
//function表達式
var fun2=function(){console.log(2)}; 
let fun3=function(){console.log(3)}; 

function表達式雖然提升失敗,被說fun2不是一個function不被承認QQ
但並沒有破壞規則,規則還是原本那個規則喔~~來,上原因

GO{
	fun1 : function fun1(){......},
	fun2 : undefined
}

沒錯,因為他電腦看到var fun2=,就覺得他是一個原始值,不是function引用值
殊不知等號右邊是一個可愛的function。失算失算

那猜猜 fun3()的執行結果呢?
.
.
.
.
.
.
.
.
.
Uncaught ReferenceError: Cannot access 'fun3' before initialization
因為是let不會提升,不會初始化


上一篇
閉包 跟 scope chain
下一篇
stack heap內存、預編譯、作用域鏈 - 概念介紹
系列文
前端幼鳥三十天養成記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言