ECMAscrip新特性函式介紹
目錄
- 1.函式引數的預設值
- 1.1函式引數指定預設值
- 1.2與解耦賦值配合使用
- 1.3函式引數的作用域
- 2.rest引數
- 3.箭頭函式
- 3.1什麼是箭頭函式
- 3.2箭頭函式的注意事項
- 4.函式的尾呼叫
1.函式引數的預設值
1.1QisZoDbbp函式引數指定預設值
在ECMAScript 2015
中,允許為函式的引數新增預設值,將預設值直接寫在引數的後面即可。
示例程式碼如下所示:
// 函式引數指定預設值 function fun(a = 1,b = 2) { console.log(a + b); } fun() // 3
值得注意的是:引數變數是預設宣告的,所以不能用let或const再次宣告,否則會丟擲異常。
還有就是預設引數的位置都是在引數列表的最後面,否則會引發歧義,該省略的引數不能省略,
如下程式碼示例:
// 預設引數的位置應該是在最後面 function fun(a = www.cppcns.com1,b) { console.log(a,b); } // 呼叫函式,傳遞一個引數 fun(20); // 20 undefined
1.2與解耦賦值配合使用
引數預設值可以與解構賦值的預設值,結合起來使用。可以通過兩種方式為其設定預設值。示例程式碼如下所示:
function fun([a,b = 5] = [3]) { console.log(a,b); } fun() // 3 5
1.3函式引數的作用域
一旦設定了引數的預設值,函式進行宣告初始化時,引數會形成一個單獨的作用域 。等到初始化結束,這個作用域就會消失。這種語法行為,在不設定引數預設值時,是不會出現的。
示例程式碼如下所示:
let x = 5 function fun(y = x) { x = 10 console.log(y); } fun() // 5
2.rest引數
ECMAScript 2015
引入rest
引數(形式為...變數名),用於獲取函式的多餘引數,這樣就不需要使用arguments物件了。rest 引數搭配的變數是一個數組,該變數將多餘的引數放入陣列中。
示例程式碼如下所示:
// 使用 arguments 物件最傳入的引數求出最大值 function max1() { return Math.max.apply(null,arguments) } console.log(max1(1,5,6,33,65,35,15)); // 65 // 使用 rest 引數 function max2(...arg) { return Math.max(...arg) } console.log(max2(1,15)); // 65
3.箭頭函式
3.1什麼是箭頭函式
ECMAScript 2015
新增了箭頭函式(又稱胖剪頭函式),相比函式表示式具有較短的語法並以詞法的方式繫結this 。箭頭函式在大多數情況下都是匿名的。
箭頭函式的語法結構如下所示:
// 基本語法結構 (引數1,引數2,...,引數N) => {函式宣告} (引數1,引數N) => 表示式(單一) // 相當於:(引數1,引數N) => {return 表示式} // 當只有一個引數時,小可號是可選的 (引數) => {函式宣告} // 或者 引數 => {函式宣告} // 沒有引數應該寫一對小括號 () => {函式宣告} // 可以配合 rest 引數和預設引數 (引數1,...rest) => {函式宣告} (引數1,引數N = 預設值N) => {函式宣告}
箭頭函式也可以為其定義函式名,語法結構如下所示:
let funName = (引數1,引數N) => {函式宣告}
示例程式碼如下所示:
let sum = (a,b) => { return a + b } console.log(sum(10,20)); //30
3.2箭頭函式的注意事項
箭頭函式有幾個使用注意點:
- 函式體內的
this
物件,就是定義時所在的物件,而不是使用時所在的物件。
示例程式碼如下所示:http://www.cppcns.com
// ES5 寫法
let fun1 = function () {
www.cppcns.com console.log(this.id);
}
// ES6 箭頭函式寫法
let fun2 = () => {
console.log(this.id);
}
let obj1 = {
id: 666,fun: fun1
}
let obj2 = {
id: 666,fun: fun2
}
obj1.fun() // 666
obj2.fun() // undefined
由程式碼我們可以看出,普通函式的this
是呼叫時確定的,而我們的箭頭函式的this
是在定義時就確定了的。
- 不可以當作建構函式,也就是說,不可以使用
new
命令,否則會丟擲一個錯誤。 - 不可以使用
arguments
物件,該物件在函式體內不存在。如果要用,可以用rest引數代替。
4.函式的尾呼叫
尾呼叫是函式式的一個重要概念,本身非常簡單,一句話就能說清楚,就是指某個函式的最後一步是呼叫另一個函式。
示例程式碼如下所示:
let x = (x) => { return 2 * x } let y = function (y) { return x(y) } console.log(y(20)); // 40
到此這篇關於ECMAscrip新特性之函式的擴充套件的文章QisZoDbbp就介紹到這了,更多相關ECMAscrip函式的擴充套件內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!