關於Function declaration和Function expression的差異
前言
最近在youtube看到Top 10 JavaScript Interview Questions ( Part 2 ),才發現原來這有差別,在此做個紀錄。
內容
Function expression的行為和我認知的行為一致,範例如下
funExpression();//ReferenceError: funExpression is not defined let funExpression=function(){ console.log('I am a function expression'); } funExpression();//I am a function expression
再來看看Function declaration,範例如下
可以看到第一次喚起"funDeclaration"時遽然可以正常喚起!這表示Javascript其實會先把整段程式碼先解讀過才執行,而不是一行一行執行,如果是一行一行執行,在第一次喚起"funDeclaration"應該要和Function expression一樣認定該變數不存在。
如果上網查詢Javascript會被歸類在"直譯",查了一下直譯器wiki,裡面解釋直譯為"把高階程式語言一行一行直接轉譯執行",而編譯是"編譯器已一次將所有原程式碼翻譯成另一種語言",而從Function declaration的行為來看,是將片段程式碼解讀後執行,這樣也算是"直譯"!?看來我必須對"直譯"的觀念該更新了。
funDeclaration();//I am a function declaration function funDeclaration(){ console.log('I am a function declaration'); } funDeclaration();//I am a function declaration
可以看到第一次喚起"funDeclaration"時遽然可以正常喚起!這表示Javascript其實會先把整段程式碼先解讀過才執行,而不是一行一行執行,如果是一行一行執行,在第一次喚起"funDeclaration"應該要和Function expression一樣認定該變數不存在。
如果上網查詢Javascript會被歸類在"直譯",查了一下直譯器wiki,裡面解釋直譯為"把高階程式語言一行一行直接轉譯執行",而編譯是"編譯器已一次將所有原程式碼翻譯成另一種語言",而從Function declaration的行為來看,是將片段程式碼解讀後執行,這樣也算是"直譯"!?看來我必須對"直譯"的觀念該更新了。
沒有留言:
張貼留言