es6的函式拓展

2021-09-09 02:03:14 字數 1391 閱讀 5295

參考:

1.增加函式預設值

es6允許為函式提供預設值,與解構賦值一起使用,非常地方便:

function foo() 

foo({})

//相當於執行let ={};

//輸出undefined 5

foo()

//相當於執行let =

//輸出 1 5

foo() // 1 2

foo() // typeerror: cannot read property 'x' of undefined

//相當於執行let =undefined;

//因為沒有引數存在,所以報錯typeerror: cannot read property 'x' of undefined

所以以後我們做乙個通用函式介面,可以指定預設值不能省略,省略就丟擲錯誤,再也不用擔心其他小夥伴因為因為引數缺失問題而出現bugger了

function add() else

}add();//error

add();//10

需要注意的是,使用函式預設值時

(1)length屬性失真

如果在某個引數使用了預設值,後面的引數就不計入函式的length了

(function (a, b = 1, c) {}).length // 1
let arr=[1,2,3]

(function(...arr) {}).length // 0

(2)函式引數作用域化

一旦設定了引數的預設值,函式進行宣告初始化時,引數會形成乙個單獨的作用域(context)。等到初始化結束,這個作用域就會消失。這種語法行為,在不設定引數預設值時,是不會出現的。

function f(y = x) 

//如果此時,全域性變數x不存在,就會報錯。

f() // referenceerror: x is not defined

//因為引數形成乙個作用域塊,執行let y=x;在引數作用域塊裡找不到x這個變數,根據作用域鏈就回到全域性作用域裡面去找x,發現也沒有x,於是就報錯了。

(3)嚴格模式

從 es5 開始,函式內部可以設定為嚴格模式。es2016 做了一點修改,規定只要函式引數使用了預設值、解構賦值、或者擴充套件運算子,那麼函式內部就不能顯式設定為嚴格模式,否則會報錯。

(4)引入函式的name屬性

var f = function () {};

// es5

f.name // ""

// es6

f.name // "f"

(5)箭頭函式

這個就不多說了,大家都用爛了,主要是this的指向問題。

ES6 函式拓展內容

es6允許為函式的引數設定預設值,即直接寫在引數定義的後面。function log x,y world log hello hello world log hello yivi hello yivi log hello hello引數變數是預設宣告的,因此不能再用let或const再次宣告,也不能...

ES6 函式的拓展 四

一 引數帶預設值函式 1 在函式形參可以賦予函式預設值 即實參嚴格匹配undefined時,在函式內部使用形參時呼叫它的預設值 2 函式name屬性 返回函式名稱,無名的函式返回空字串 3 函式length屬性 從左往右開始計算函式形參直到碰到帶有預設值形參時結束計算,這樣計算的形參個數 eg 普通...

es6 陣列拓展

陣列 屬性 constructor,length,prototype 方法 push,pop,shift,unshift 新增 splice,slice,reverse,sort,concat,filter,map,some,every 1 filter 過濾出符合條件的值,返回新陣列 var sp...