Get to know MDN better
此頁面由社群從英文翻譯而來。了解更多並加入 MDN Web Docs 社群。
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2016年9月.
箭頭函式運算式(arrow function expression)擁有比函式運算式還簡短的語法。它沒有自己的 this、arguments、super、new.target 等語法。本函式運算式適用於非方法的函式,但不能被用作建構式(constructor)。
也可參閱 "ES6 In Depth: Arrow functions" on hacks.mozilla.org。
箭頭函式有兩個重要的特性:更短的函式寫法與 this 變數的非綁定。
在有箭頭函數之前,每個新函式是依據如何被呼叫來定義自己的 this 變數 例如:
事實證明這對物件導向程式設計來說並不理想。
在 ECMAScript 3/5 裡面,有關 this 的問題,可以透過指派 this 值給可以關閉的變數解決。
或者透過 bind 函式來綁定 this 變數到指定函式(以上面為例,就是 growUp() 函式)。
箭頭函式並不擁有自己的 this 變數;使用的 this 值來自封閉的文本上下文,也就是說,箭頭函式遵循常規變量查找規則。因此,如果在當前範圍中搜索不到 this 變量時,他們最終會尋找其封閉範圍。
因此,在以下程式碼內,傳遞給 setInterval 的 箭頭函式中的this ,會與封閉函式的 this 值相同:
由於 this 變數具有詞彙上綁定意義,所以嚴格模式的宣告對 this 的作用將被忽略。
但嚴格模式的其他作用依舊存在。
由於箭頭函式並沒有自己的 this,所以透過 call() 或 apply() 呼叫箭頭函式只能傳入參數。thisArg 將會被忽略。
箭頭函式並沒有自己的 arguments 物件。所以在此例中,arguments 只是參考到 enclosing 作用域裡面的相同變數:
大多時候,使用其餘參數 是取代 arguments 物件的較好方式。
如同前述,箭頭函式運算式最適合用在非方法的函式。來看看如果要把它們當成方法來用,會發生什麼事:
箭頭函式並沒有自己的 this。另一個例子與 Object.defineProperty() 有關:
箭頭函式不可作為建構式使用;若使用於建構式,會在使用 new 時候拋出錯誤。
箭頭函式並沒有原型(prototype)屬性。
yield 關鍵字無法用於箭頭函式的 body(except when permitted within functions further nested within it)。因此,箭頭函式無法使用 generator。
箭頭函式可以變成 concise body 或者平常使用的 block body。
在 concise body 裡面只需要輸入運算式,就會附上內建的回傳。在 block body 裡面就必須附上明確的 return 宣告。
請注意只使用 params => {object:literal} 並不會按照期望般回傳物件字面值(object literal)。
因為在大括弧({})裡面的文字會被解析為有序宣告(例如 foo 會被當作標記(label)、而不是物件的 key )
要記得把物件字面值包在圓括弧內。
箭頭函式不可以在參數及箭頭間包含換行。
箭頭函式的箭頭儘管不是操作符,但藉著運算子優先等級,箭頭函式有著和普通函式不相同的特殊解析規則。
| ECMAScript® 2027 Language Specification # sec-arrow-function-definitions |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025年7月16日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.