ES6之函數的擴展

ES6對函數的擴展函數蠻多的,不過經常使用的估計也就是默認值和箭頭函數了。數組

函數參數默認值:bash

估計不少人都這樣用過默認值:函數

var a = 10;

var b = a || 1
複製代碼

正常狀況下沒有問題,可是要是a是0或者是false等會被轉換成Boolean類型false的時候就會出錯。ES6對參數的默認值容許直接設置:優化

function fn(x = 10, y = 20) {  

  console.log(x);  

  console.log(y);

}

fn()// 10 20
複製代碼

參數默認值至關於你考慮了沒有參數的狀況,沒有參數也不會報錯。要注意的是參數變量不能用let或者const再次聲明,不容許同名。參數默認值位置是不能跳過的,想要跳過默認想要傳undefined,null無效。還有一點,沒有默傳參狀況下才會賦值:this

function fn(x = (function () {  

  console.log('執行');

})(), y = 20) {



}

fn()//執行fn(10)

複製代碼

參數默認值和解構賦值配合使用:spa

function fn({x = 10, y = 20} = {}) {  

  console.log(x);  

  console.log(y);

}

fn()//10 20

fn({x: 30, y: 40})//30 40
複製代碼

Length屬性:code

簡單說就是參數個數:cdn

function fn(a, b, c) {}

console.log(fn.length);//3
複製代碼

有默認值的時候,這個length只會計算最後面有默認值以前的參數個數:對象

function fn(a = 0, b, c) {}

console.log(fn.length);//0

function fn(a, b = 0, c) {}

console.log(fn.length);//1

function fn(a, b, c = 0) {}

console.log(fn.length);//2

function fn(a = 0, b = 0, c) {}

console.log(fn.length);//0
複製代碼

函數參數做用域:作用域

設置函數參數默認值的時候,參數會造成一個單獨的做用域,初始化接收做用域消失。注意,只有設置默認值的時候纔會。

var a = 1;function fn(a, b = a) {  

  console.log(a);

}

fn(10)//10
複製代碼

造成一個做用域,b指向了參數裏面的a

var a = 1;

function fn(b = a) {  

  var a = 10;  

  console.log(b);

}

fn()//1
複製代碼

造成做用域,a沒有找到就向外尋找,找到全局的a。

Rest參數:

函數有一個arguments參數,咱們能夠用數組的方法去獲取內容,可是arguments不是數組,用不了數組的方法。Rest參數其實就是用擴展運算符把參數變成一個數組:

function fn(...val) {   

 console.log(val);

}

fn(1, 2, 3)//[1, 2, 3]
複製代碼

嚴格模式:

ES5以後能夠函數內部使用嚴格模式,ES6只要使用了默認值、解構賦值、或者擴展運算符就不能使用

function fn() {  

  'use strict'

}

複製代碼

Name屬性:

ES6對name有一些調整,優先函數名字,其次函數變量的名字,Function構造函數會返回anonymous,經過bind改變this的會加bound

function fn() {}

console.log(fn.name);//fn

var fn = function () {}

console.log(fn.name);//fn

var fn = function ffn() {}

console.log(fn.name);//ffn

console.log((new Function).name);//anonymous

function fn() {}

console.log(fn.bind({}).name);//bound fn

複製代碼

箭頭函數:

這應該不用多說了,如今幾乎都使用箭頭函數,以前也有分享過箭頭函數的一些內容。

雙冒號運算符:

雙冒號左邊是一個對象,右邊是一個函數。該運算符會自動將左邊的對象,做爲上下文環境(即this對象),綁定到右邊的函數上面。這好像目前是一個提案,我試着寫了寫,運行報錯。

尾調用優化:

尾調用是被忽略的,因此單獨分享了一篇尾調用優化的,能夠查看。

函數參數尾逗號:

咱們函數無論是調用仍是定義的時候,都不會在參數最後面加個逗號,ES2017纔開始容許加逗號不報錯:

function fn(a, b,) {  

  console.log(a);  

  console.log(b);

}

fn(10, 20,)
複製代碼

Coding 我的筆記

相關文章
相關標籤/搜索