輕鬆學習 JavaScript——第 6 部分:JavaScript 箭頭函式
本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
JavaScript箭頭函式是ECMAScript 6中引入的編寫函式表示式的一種簡便方法。通常,在JavaScript中,可以通過兩種方式建立函式:
- 函式語句。
- 函式表示式。
可以如下所示建立函式語句:
function add(num1, num2) { var res = num1 + num2; return res; } var sum = add(7, 2); console.log(sum);
也可以建立相同功能的函式表示式,如下所示:
var add = function (num1, num2) { var res = num1 + num2; return res; } var sum = add(7, 2); console.log(sum);
ECMA 2015(或ECMA Script 6)引入了更短的語法來編寫函式表示式,稱為箭頭函式。使用箭頭函式,你可以將上面的函式表示式編寫為:
var add = (num1, num2) => { return num1 + num2; };
正如你所看到的,使用箭頭函式編寫的函式表示式更短。
箭頭函式的基本語法規則
首先,引數應該在小括號中傳遞。你可以建立有兩個引數的箭頭函式,如下所示:
ar add = (num1, num2) => { return num1 + num2; };
如果只要傳遞一個引數,那麼括號是可選的,可以選擇忽略。你可以建立一個引數的箭頭函式,如下所示:
var add = num => { return num * 10; };
如果沒有引數,那麼你必須要有一個空括號——不能沒有。所以對於沒有引數的函式,箭頭函式是這樣寫的:
var add = () => { console.log("hey foo") };
如果函式中有單個表示式或語句:
- 在主體中使用括號是可選的。
- 使用return語句是可選的。
你可以重寫add函式,而不使用函式體中的括號和return語句,如下所示:
var add = (num1, num2) => num1 + num2;
你也可以使用控制檯語句編寫不帶引數的函式,如下所示:
var add = () => console.log("hey");
返回物件字面量
JavaScript箭頭函式也可以返回物件字面量。唯一的要求是你需要把返回物件裝入小括號中,如下所示:
var foo = (name, age) => ({ name: name, age: age }) var r = foo("my cat", 22); console.log(r);
正如你所看到的那樣,要返回的物件被放在了小括號內。如果你不這樣做,那麼JavaScript將無法區分物件字面量和函式體。
箭頭函式支援rest引數
JavaScript箭頭函式支援另一個ES6功能:rest引數。你可以在箭頭函式中使用rest引數,如下面的程式碼所示:
var add = (num1, num2, ...restparam) => { console.log(restparam.length); var result = num1 + num2; return result; } var r = add(67, 8, 90, 23); console.log(r);
在這個例子中,當你使用帶有rest引數的箭頭函式時,輸出會是2和75,因為傳遞的額外引數的數量是2,num1和num2的總和是75。
箭頭功能支援預設引數
另外,JavaScript箭頭函式還支援另一個ES6功能:預設引數。此處詳細介紹了預設引數。你可以在箭頭函式中使用預設引數,如下所示:
var add = (num1 = 9, num2 = 8) => { var result = num1 + num2; return result; } var r = add(); console.log(r);
在上面的程式碼中,箭頭函式中有預設引數。呼叫該函式時,我們沒有傳遞任何值,並且由於預設引數的存在,輸出將是17。
“this”在箭頭函式中如何工作?
箭頭函式沒有它自己的this值。箭頭函式中的this值總是從封閉範圍繼承。在JavaScript中,每個函式都有它自己的this值,這取決於程式碼是如何呼叫函式的。請仔細看下面列出的程式碼:
var Cat = { name: 'mew', canRun: function () { console.log(this) var foo = () => { console.log(this) } foo(); } };
在這裡,cat是一個物件字面量,它包括:
- 屬性名稱。
- 方法canRun。
在canRun方法中,我們建立了一個箭頭函式foo,給出了this值。由於箭頭函式沒有它自己的this值,所以它將從周圍的函式獲取,因此,你將得到:
正如你所看到的,this值在canRun方法和箭頭函式foo中是相同的。箭頭函式從繼承範圍得到this值。如果你對此不甚清楚,那麼請牢記以下兩條規則:
- 使用object.method在方法中獲取一個有意義的物件作為this值。
- 對於任何其他要求,使用箭頭函式,由於函式沒有自己的this值,所以它將繼承封閉範圍的this值。
使用箭頭函式的限制條件
應用箭頭函式時要注意的一些限制條件:
- 箭頭函式沒有引數物件。
- 箭頭函式不能與新運算子一起使用,因此它不能用作建構函式。
- 箭頭函式沒有原型屬性。
如果你嘗試使用箭頭函式作為建構函式,那麼你會得到異常。請看下面的程式碼:
var foo = (name, age) => { name = name, age = age }; var f1 = new foo("cat", 6);
程式碼試圖通過使用箭頭函式foo作為建構函式來建立物件f1,JavaScript將丟擲以下異常:
而且,當你試圖輸出箭頭函式的原型值時,你會得到undefined的輸出:
var foo = (name, age) => { name = name, age = age }; console.log(foo.prototype);
發生這種情況的原因是因為箭頭函式沒有原型屬性。請記住:雖然箭頭函式為你提供了編寫函式表示式的簡短方法,但它沒有自己的this值,也不能用作建構函式。
系列目錄
輕鬆學習 JavaScript——第 1 部分:瞭解 let 語句
輕鬆學習 JavaScript——第 2 部分:函式中的 Rest 引數
輕鬆學習 JavaScript——第 3 部分:函式中的預設引數
輕鬆學習 JavaScript——第 4 部分:函式中的 arguments 物件
輕鬆學習 JavaScript——第 5 部分:簡化函式提升
輕鬆學習 JavaScript——第 6 部分:JavaScript 箭頭函式
輕鬆學習 JavaScript——第 7 部分:物件屬性描述符
輕鬆學習 JavaScript——第 8 部分:JavaScript 中的類
譯文連結:http://www.codeceo.com/article/easy-javascript-06-arrow-function.html
英文原文:Easy JavaScript Part 6 : Arrow functions in JavaScript
翻譯作者:碼農網 – 小峰
[ 轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]
相關文章
- 輕鬆學習 JavaScript(6):JavaScript 箭頭函式JavaScript函式
- 輕鬆學習 JavaScript——第 5 部分:簡化函式提升JavaScript函式
- 輕鬆學習 JavaScript——第 4 部分:函式中的 arguments 物件JavaScript函式物件
- 輕鬆學習 JavaScript——第 2 部分:函式中的 Rest 引數JavaScript函式REST
- 輕鬆學習 JavaScript——第 8 部分:JavaScript 中的類JavaScript
- 輕鬆學習 JavaScript——第 3 部分:函式中的預設引數JavaScript函式
- JavaScript(ES6)—箭頭函式JavaScript函式
- JavaScript 箭頭函式JavaScript函式
- javascript箭頭函式JavaScript函式
- Javascript ES6中的箭頭函式JavaScript函式
- 輕鬆學習 JavaScript——第 1 部分:瞭解 let 語句JavaScript
- 輕鬆學習 JavaScript(5):簡化函式提升JavaScript函式
- 輕鬆學習 JavaScript——第 7 部分:物件屬性描述符JavaScript物件
- 輕鬆學習 JavaScript (4):函式中的 arguments 物件JavaScript函式物件
- JavaScript初學者必看“箭頭函式”JavaScript函式
- 輕鬆學習 JavaScript (2):函式中的 Rest 引數JavaScript函式REST
- 輕鬆學習 JavaScript (3):函式中的預設引數JavaScript函式
- 怎麼輕鬆學習JavaScriptJavaScript
- 輕鬆學習 JavaScript(8):JavaScript 中的類JavaScript
- JavaScript學習總結(四)function函式部分JavaScriptFunction函式
- ES6箭頭函式函式
- es6學習_箭頭函式解決this指向問題函式
- javascript中的this使用場景以及箭頭函式中的thisJavaScript函式
- 箭頭函式函式
- ES6 箭頭函式(arrow function)函式Function
- ES6箭頭函式總結函式
- ES6 系列之箭頭函式函式
- 深入解析 ES6:箭頭函式函式
- ES6箭頭函式的使用函式
- javascript基礎修煉(8)——指向FP世界的箭頭函式JavaScript函式
- 輕鬆學習 JavaScript(1):瞭解 let 語句JavaScript
- ES 6 中的箭頭函式及用法函式
- ES6 箭頭函式下的this指向函式
- javaES6箭頭函式的全新特性Java函式
- TypeScript 箭頭函式TypeScript函式
- JS箭頭函式JS函式
- ES6語法學習筆記之箭頭函式、剩餘引數筆記函式
- 輕鬆學習 JavaScript(7):物件屬性描述符JavaScript物件