ES6 函式引數的預設值

2022-02-09 19:19:48 字數 1355 閱讀 4856

在es6之前,不能直接為函式的引數指定預設值,只能採取變通的方法。

function log(x,y)

log('kkk');//kkk world

這種寫法的缺點在於:

如果引數y賦值了,但是對應的布林值為false,則該賦值不起作用。如果在呼叫函式的時候,傳入的y引數是乙個空字串,那麼y就會被修改為預設值。

避免這個問題,需要先判斷一下:1.通過判斷值是否等於undefined,2.判斷arguments.length是否為1.

但是es6允許為函式的引數設定預設值,即直接寫在引數定義的後面。

function log(x,y='world')

log('hello'); //hello world

es6語法的好處:

1.簡潔

2.閱讀**的人可以看出哪些引數是可以省略的,不用檢視函式體或文件

3.有利於將來的**優化,即使未來的版本即使拿掉這個引數,以前的**也可以執行

還有引數變數是預設宣告的,不能在函式體內部再進行宣告。

這裡有兩種寫法需要區分一下:

function m1( = {})

function m2( = )

m1();//[3,0]

m2();//[3,undefined]

m1({});//[0,0]

m2({});//[undefined,undefined]

通常情況下,定義了預設值的引數應該是函式的尾引數。因為這樣比較容易看出,到底省略了哪些引數,如果非尾部的引數設定預設值,實際上這個引數是無法省略的。

如果有預設值的引數都不是尾引數,這時,無法只省略該引數而不省略其後的引數,除非顯示輸入undefined。如果傳入undefined,那麼就會觸發預設值,但是null沒有這個效果。

函式的length屬性

如果函式指定了預設值後,函式的length屬性就不會包含有預設值的引數。這是因為length屬性的含義是,該函式預期傳入的引數個數,某個引數指定預設值之後,預期傳入的引數個數就不包括

這個引數了,同理,rest引數也不會計入length屬性。

函式引數預設值的型別

(1)變數

如果函式引數的預設值是乙個變數,則該變數所處的作用域和其他變數的作用域規則相同,即是先前函式的作用域,然後再是全域性作用域。

(2)函式

如果函式a的引數預設值是函式b,那麼由於函式的作用域是其宣告的時候所在的作用域,函式b的作用域就在全域性作用域而不是函式a的作用域。

方法引數 預設值 ES6 函式的預設值

es6 之前,不能直接為函式的引數指定預設值,只能採用變通的方法。function log x,y log hello hello world log hello 你好 hello china 這裡可以看到,檢查函式log的引數y有沒有賦值,如果沒有,則指定預設值為 哈嘍 這種寫法的缺點在於,如果引...

ES6 函式預設值

1 es6之前,函式如果需要預設值,需要在函式內額外處理,如 function log x,y log hello hello world log hello es6 hello es6 log hello hello world上述 中第二行,檢查y引數是否有值,如果沒有,將其賦值為預設值 wor...

ES6 函式預設值

在編寫函式的時候,傳參有時會帶來一些問題 比如,有兩個引數,但是我傳參的時候只傳了乙個怎麼辦呢?或者我乙個都沒有傳怎麼辦呢?通常來說,我們都會這麼處理一下 function person name 但是如果引數很多呢?name age 等等 總不能每乙個都這麼寫吧,多麻煩啊!所以,最怕麻煩的程式設計...