W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
創(chuàng)建函數(shù)還有另外一種非常簡單的語法,并且這種方法通常比函數(shù)表達(dá)式更好。
它被稱為“箭頭函數(shù)”,因?yàn)樗雌饋硐襁@樣:
let func = (arg1, arg2, ..., argN) => expression;
這里創(chuàng)建了一個(gè)函數(shù) func
,它接受參數(shù) arg1..argN
,然后使用參數(shù)對右側(cè)的 expression
求值并返回其結(jié)果。
換句話說,它是下面這段代碼的更短的版本:
let func = function(arg1, arg2, ..., argN) {
return expression;
};
讓我們來看一個(gè)具體的例子:
let sum = (a, b) => a + b;
/* 這個(gè)箭頭函數(shù)是下面這個(gè)函數(shù)的更短的版本:
let sum = function(a, b) {
return a + b;
};
*/
alert( sum(1, 2) ); // 3
可以看到 (a, b) => a + b
表示一個(gè)函數(shù)接受兩個(gè)名為 a
和 b
的參數(shù)。在執(zhí)行時(shí),它將對表達(dá)式 a + b
求值,并返回計(jì)算結(jié)果。
例如:
let double = n => n * 2;
// 差不多等同于:let double = function(n) { return n * 2 }
alert( double(3) ); // 6
let sayHi = () => alert("Hello!");
sayHi();
箭頭函數(shù)可以像函數(shù)表達(dá)式一樣使用。
例如,動(dòng)態(tài)創(chuàng)建一個(gè)函數(shù):
let age = prompt("What is your age?", 18);
let welcome = (age < 18) ?
() => alert('Hello!') :
() => alert("Greetings!");
welcome();
一開始,箭頭函數(shù)可能看起來并不熟悉,也不容易讀懂,但一旦我們看習(xí)慣了之后,這種情況很快就會改變。
箭頭函數(shù)對于簡單的單行行為(action)來說非常方便,尤其是當(dāng)我們懶得打太多字的時(shí)候。
到目前為止,我們看到的箭頭函數(shù)非常簡單。它們從 =>
的左側(cè)獲取參數(shù),計(jì)算并返回右側(cè)表達(dá)式的計(jì)算結(jié)果。
有時(shí)我們需要更復(fù)雜一點(diǎn)的函數(shù),比如帶有多行的表達(dá)式或語句。在這種情況下,我們可以使用花括號將它們括起來。主要區(qū)別在于,用花括號括起來之后,需要包含 return
才能返回值(就像常規(guī)函數(shù)一樣)。
就像這樣:
let sum = (a, b) => { // 花括號表示開始一個(gè)多行函數(shù)
let result = a + b;
return result; // 如果我們使用了花括號,那么我們需要一個(gè)顯式的 “return”
};
alert( sum(1, 2) ); // 3
更多內(nèi)容
在這里,我們贊揚(yáng)了箭頭函數(shù)的簡潔性。但還不止這些!
箭頭函數(shù)還有其他有趣的特性。
為了更深入地學(xué)習(xí)它們,我們首先需要了解一些 JavaScript 其他方面的知識,因此我們將在后面的 深入理解箭頭函數(shù) 一章中再繼續(xù)研究箭頭函數(shù)。
現(xiàn)在,我們已經(jīng)可以用箭頭函數(shù)進(jìn)行單行行為和回調(diào)了。
箭頭函數(shù)對于簡單的操作很方便,特別是對于單行的函數(shù)。它具體有兩種形式:
(...args) => expression
? —— 右側(cè)是一個(gè)表達(dá)式:函數(shù)計(jì)算表達(dá)式并返回其結(jié)果。如果只有一個(gè)參數(shù),則可以省略括號,例如 ?n => n*2
?。(...args) => { body }
? —— 花括號允許我們在函數(shù)中編寫多個(gè)語句,但是我們需要顯式地 ?return
?來返回一些內(nèi)容。用箭頭函數(shù)重寫下面的函數(shù)表達(dá)式:
function ask(question, yes, no) {
if (confirm(question)) yes();
else no();
}
ask(
"Do you agree?",
function() { alert("You agreed."); },
function() { alert("You canceled the execution."); }
);
function ask(question, yes, no) {
if (confirm(question)) yes();
else no();
}
ask(
"Do you agree?",
() => alert("You agreed."),
() => alert("You canceled the execution.")
);
是不是看起來精簡多了?
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: