ES6中函式的擴充套件(函式引數預設值)

2021-09-30 18:33:51 字數 2078 閱讀 1576

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

function log(x,y='world')

log('hello');/*hello world*/

log('hello','china');/*hello china*/

log('hello','');/*hello*/

function point(x=0,y=0)

const p = new point();

p/**/

引數變數是預設宣告的,所以不能在函式體中再次宣告;

引數預設值可以與解構賦值的預設值結合起來使用:

function fetch(url,  })

fetch('',{});/*get*/

fetch('');/*報錯*/

上述函式fetch的第二個引數是乙個物件,可以為三個屬性設定預設值;這種寫法不能省略第二個引數,否則會報錯;

但如果結合函式引數的預設值,就可以省略第二個引數(雙重預設值)如下:

function fetch(url,  } = {})

fetch('');/*get*/

定義了預設值的引數,應該是函式的尾引數,如果非尾部的引數設定預設值,實際上這個引數無法省略(如下):

function f( x, y = 5, z )

f(); /*[undefined, 5, undefined]*/

f(1); /*[1, 5, undefined]*/

f(1, ,2); /*報錯*/

f(1, undefined, 2); /*[1, 5, 2]*/

f(1, null, 2); /*[1, null, 2]*/

引數預設值位置

上述**中,有預設值的引數都不是尾引數,

可全部省略(如上第一條);

可省略有預設值引數的引數以及後邊的引數(如上第二條);

若只省略有預設值的引數,則會報錯(如上第三條);

這時無法只省略該引數,而不省略他後邊的引數,除非顯示輸入undefined;因為如果傳入undefined,將觸發該引數等於預設值(如上第四條);

null不可以(如上第五條)。

函式的length屬性

(function(...args) {}).length:將返回沒有指定預設值的引數個數,但如果設定了預設值的引數不是尾引數,則length屬性也不再計入後邊的引數了。

函式的length屬性,不包括rest引數。

(function (a) {}).length  /*1*/

(function (a = 5) {}).length /*0*/

(function (a, b, c = 5) {}).length /*2*/

(function (a = 5, b, c) {}).length /*0*/

(function (...a) {}).length /*0 rest引數*/

作用域

一旦設定了引數的預設值,函式進行宣告初始化時,引數會形成乙個單獨的作用域;

等初始化結束,這個作用域會消失;

var x = 1;

function f(x, y = x)

/*引數y的預設值等於變數x,呼叫函式f時,引數形成乙個單獨的作用域,在這個作用域中,預設值變數x指向第乙個引數x,而不是全域性變數x*/

f(2);//2

let x = 1;

function f(y = x)

/*引數y的預設值等於x,呼叫函式f時,引數 y = x 形成乙個單獨的作用域,在這個作用域中,變數x本身沒有定義,所以指向全域性變數x*/

/*函式呼叫時,函式體內部的區域性變數x影響不到預設值變數x*/

f();

ES6函式擴充套件(函式引數預設值)

一 函式的預設引數基本使用方法function test x,y hello test winne 函式引數 winne hello test winne hi 函式引數 winne hi如上 我們可以看出,當函式引數有了預設值可以不傳入那個引數,那麼就直接使用預設的引數。注意 引數變數是預設宣告的...

ES6 函式擴充套件(函式引數預設值)

es6 之前,不能直接為函式的引數指定預設值,只能採用變通的方法。function log x,y log hello hello world log hello china hello china log hello hello world面 檢查函式log的引數y有沒有賦值,如果沒有,則指定預設...

ES6中的函式(函式引數 預設值 箭頭函式)

function foo a,b foo 1,2 function bar bar function foo a,b 10 foo 1 function bar a,b 10 bar 3 function fn fn function bar a,b 10 20 bar function fn fn...