ES6學習筆記九 函式的擴充套件

2021-10-10 17:21:40 字數 2644 閱讀 7849

一、函式引數的預設值

function

log(x,y=

'world'

)log

('hello');

//hello world

log(

'hello',''

);//hello

注意:引數是預設宣告的,所以在函式體內不能用let或const再次宣告

function

foo(x=5)

注意:使用引數預設值時,函式不能有同名引數

function

foo(x,x,y)

//報錯

注意:函式引數是惰性求值(引數預設值不是傳值的,而是每次都重新計算預設值表示式的值)

var x=99;

funtion foo

(p=x+1)

foo();

//100

x=100

;//修改全域性作用域下x的值

foo();

//101

注意:引數設定預設值位置應該在尾部

function

f(x=

1,y)f(

,1);

//報錯(傳遞數值前面的引數無法省略)

//除非顯性傳入undefined (意義不大)

f(undefined,1)

;//[1,1]

二、函式的length屬性

函式的length屬性將返回沒有指定預設值的引數個數

(

function

(a))

.length;

//1(

function

(a=5))

.length;

//0

注意:rest引數不計入length屬性

(

function

(...args)

).length;

//0

注意:*如果設定了預設值的引數不是尾引數,那麼length屬性不再計入後面的引數

(

function

(a=0

,b,c)

).length;

//0(

function

(a,b=

1,c)

).length;

//1

三、函式引數作用域

一但設定了引數預設值,函式進行宣告初始化時,引數會形成乙個單獨的作用域。初始化結束後,作用域就會消失。

例子一

var x=1;

function

f(x,y=x)

foo(2)

;//2

解釋:呼叫foo時傳遞引數x=2,此時y沒有傳遞引數,觸發預設值為x,並且引數x,y形成乙個單獨作用域。在當前作用域下x=2,故y的值是2,而不是全域性作用域下x。

例子二

let x=1;

function

f(y=x)f(

);//1

解釋:函式引數觸發單獨作用域,因為在當前作用域下找不到x的值,向外層(更高層)尋找變數x,故y=1。不是函式體內的x=2。如果最外層找不到該變數,則報錯。

如果引數的預設值是乙個函式,該函式的作用域也遵守這個規則

let foo=

'outer'

function

bar(

func

=x=>foo)

bar();

//outer

例子三(複雜)

var x=1;

function

foo(x,y=

function()

)foo()

;//3

x;//1(函式引數x)

解釋:函式引數x指向全域性下的x,即x=1。y的值是匿名函式。在foo函式體中,執行y() 。此時函式y內部的x是指向全域性下的x,故此時全域性下的x則已經被修改了。函式體輸出x,是輸出函式體內部的x,而不是全域性下的x。

例子四(對比例子三)

var x=1;

function

foo(x,y=

function()

)foo()

;//2

x;//1(函式引數x)

解釋:與例子三的區別在於函式foo中的x是指向全域性的。

四、嚴格模式

從es5開始,函式內部可以設定為嚴格模式。在es6中,規定只要函式使用了預設值析構函式或者擴充套件運算子,那麼函式內部就不能顯性設定為嚴格模式,否則會報錯。

ES6學習筆記(函式擴充套件)

1.預設引數function people people 輸出 3 30 people 輸出 undefined 302.擴充套件運算子 剩餘引數 在es6之前,如果要在方法內將多字符集成為乙個陣列,一般會使用以下寫法 function sum sum 1,2,123,qwer es6之後,使用運算...

ES6 函式擴充套件

函式在js裡是相當重要的一部分了,es6裡也新增了一些函式方法,來看一下 test hello hello world test hello kill hello kill es6增加了函式引數預設值,可以直接在宣告引數的同時賦預設值,但是也可以後面重新賦值 test2 kill 括號內有引數x時,...

ES6函式擴充套件

函式引數的預設值 在es5中,我們想給函式乙個預設值,需要這樣寫 function add x,y 在es6中 可以這樣寫 function add x,y ss add dd ddss add ss dd ssdd add dd dd我們只需要在引數上直接寫上我們想要的預設值就好了。當我們給函式乙...