iT邦幫忙

2023 iThome 鐵人賽

DAY 6
1
Modern Web

那些你可能要知道的前端知識系列 第 6

【day6】function declaration 、 function expression 差別

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20230909/201483033ZuWLHlda3.png

function declaration(函式宣告)function expression(函式表達式)兩種都屬於JavaScript定義函式的一種方式。

兩種函式宣告的語法

function declaration

function functionName(){
// do someting...
}

function expression

const expression = function(){
// do someting...
}

提升Hoisting

function declarationvar都有著"hoisting"(提升)的特性,這代表可以在宣告之前調用這個函式。

console.log(a) // 輸出 undefined

var a = 1
a(2, 2) // 輸出 4

function a(a, b){
    return a * b
}

但是function expression則是執行到它這行才會開始運作,因此以下程式碼如果在函式之前先呼叫,則不會正確執行。

a(2, 2) // 錯誤:ReferenceError: a is not defined 

const a = function(a, b){
    return a * b
}

儲存位置

Function Declaration由於它的提升特性,它通常存儲在全域或函式作用域。
Function Expression通常存儲在變數中。

Function Declaration(函式宣告)的名稱直接存在於其所在的作用域:

function declareFunction() {
    return "Function Declaration";
}

console.log(declareFunction()); // 輸出: "Function Declaration"
console.log(window.declareFunction()); // 在瀏覽器中,它也存在於全域物件上

Function Expression(函式表達式)則存儲在變數中:

const expressionFunction = function() {
    return "Function Expression";
};

console.log(expressionFunction()); // 輸出: "Function Expression"
console.log(window.expressionFunction); // 在瀏覽器中,這會輸出 undefined,除非它被定義為全域變數

上一篇
【day5】(JavaScript) 閉包 Closure
下一篇
【day7】Array陣列的遍歷方法(map, filter, every, some)
系列文
那些你可能要知道的前端知識30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言