一、函式預設值
1、es6 允許為函式的引數設定預設值,即直接寫在引數定義的後面。傳空或不傳則返回預設值
function log(x, y = 'world')log('hello') //
hello world
log('hello', 'china') //
hello china
log('hello', '') //
hello
引數變數是預設宣告的,所以不能用let
或const
再次宣告。
使用引數預設值時,函式不能有同名引數
function foo(x = 5)function foo(x, x, y = 1)
2、與解構賦值預設值結合使用
引數預設值可以與解構賦值的預設值,結合起來使用。
只有當函式foo
的引數是乙個物件時,變數x
和y
才會通過解構賦值而生成。
function foo()foo({})
//undefined, 5
foo() //
1, 5
foo() //
1, 2
foo() //
typeerror: cannot read property 'x' of undefined
function fetch(url, })
fetch('', {})
//"get"
fetch('')
//報錯
雙重預設值,函式fetch
沒有第二個引數時,函式引數的預設值就會生效,然後才是解構賦值的預設值生效,變數method
才會取到預設值get
。
function fetch(url, })fetch('', {})
//"get"
fetch('')
//報錯
function fetch(url, ={})
fetch('')
3、引數預設值的位置
非尾部的引數設定預設值,實際上這個引數是沒法省略的。
function f(x = 1, y)f()
//[1, undefined]
f(2) //
[2, undefined])
f(, 1) //
報錯f(undefined, 1) //
[1, 1]
4、作用域
一旦設定了引數的預設值,函式進行宣告初始化時,引數會形成乙個單獨的作用域(context)。
等到初始化結束,這個作用域就會消失。
引數y
的預設值等於變數x
。呼叫函式f
時,引數形成乙個單獨的作用域。
在這個作用域裡面,預設值變數x
指向第乙個引數x
,而不是全域性變數x
,所以輸出是2
。
var x = 1;function f(x, y =x)
f(2) //
2
函式f
呼叫時,引數y = x
形成乙個單獨的作用域。
這個作用域裡面,變數x
本身沒有定義,所以指向外層的全域性變數x
。
函式呼叫時,函式體內部的區域性變數x
影響不到預設值變數x
。
let x = 1;function f(y =x)
f()
//1
引數的預設值是乙個函式,該函式的作用域也遵守這個規則.
let foo = 'outer'function bar(func = x =>foo)bar();
//outer
5、應用
利用引數預設值,可以指定某乙個引數不得省略,如果省略就丟擲乙個錯誤。
functionthrowifmissing()
function foo(mustbeprovided =throwifmissing())
foo()
//error: missing parameter
二、rest引數
1、簡介
es6 引入 rest 引數(形式為...變數名
),用於獲取函式的多餘引數,這樣就不需要使用arguments
物件了。
rest 引數搭配的變數是乙個陣列,該變數將多餘的引數放入陣列中。
add
函式是乙個求和函式,利用 rest 引數,可以向該函式傳入任意數目的引數。
functionadd(...values)
return
sum;
}add(2, 5, 3) //
10
陣列快速排序
//arguments變數的寫法
function
sortnumbers()
//rest引數的寫法
const sortnumbers = (...numbers) => numbers.sort();
rest 引數中的變數代表乙個陣列,所以陣列特有的方法都可以用於這個變數。
rest 引數之後不能再有其他引數(即只能是最後乙個引數),否則會報錯。
functionpush(array, ...items) );
}var a =;
push(a, 1, 2, 3)
es6 語法 (正則擴充套件)
es5中常見修飾符是g i es6中新增 y,u exec 方法用於檢索字串中的正規表示式的匹配。test a false console.log u u.test a true 加上u才能被識別 console.log u let s console.log u test s false cons...
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我們只需要在引數上直接寫上我們想要的預設值就好了。當我們給函式乙...