1. 可新增預設引數
functionfn(name,age=17)
fn("amy",18); //amy,18f
n("amy",""); //amy,
fn("amy"); //amy,17
注意點:使用函式預設引數時,不允許有同名引數,否則報錯;
但是不使用預設引數時,多個同名形參不報錯。
只有在未傳遞引數,或者引數為 undefined 時,才會使用預設引數,null 值被認為是有效的值傳遞。
在函式體中,不能用let
或const
再次宣告,否則會報錯。
函式引數預設值存在暫時性死區,在函式引數預設值表示式中,還未初始化賦值的引數值無法作為其他引數的預設值。
functionf(x,y=x)
f(1); //1 1
functionf(x=y)
f(); //referenceerror: y is not defined
1.1 es6 之前,不能直接為函式的引數指定預設值,只能採用變通的方法。
function log(x, y)
這種寫法的缺點在於,如果引數y
賦值了,但是對應的布林值為false
,則該賦值不起作用。就像上面**的最後一行,引數y
等於空字元,結果被改為預設值。為了避免這個問題,通常需要先判斷一下引數
y
是否被賦值,如果沒有,再等於預設值。
if (typeof y === 'undefined')
1.2 與解構賦值的預設值,結合起來使用
function foo()
foo({})// undefined 5
foo()// 1 5
foo()// 1 2
foo()// typeerror: cannot read property 'x' of undefined
2.不定引數 即 傳入引數個數可動態
不定引數用來表示不確定引數個數,形如,...變數名,由...加上乙個具名引數識別符號組成。
具名引數只能放在引數組的最後,並且有且只有乙個不定引數。
functionf(...values)
f(1,2); //2
f(1,2,3,4); //4
備註:這裡使用不定引數時,'...'是不可替代的,同時使用了...就預設是嚴格模式,即es6語法環境,
此時再使用es5中hack,則會報錯,如想列印傳參數量,不能使用 arguments.callee.length argument.length 倒是還可以。
3. 箭頭函式
引數=>函式體
箭頭函式有幾個使用注意點。
(1)函式體內的this物件,就是定義時所在的物件,而不是使用時所在的物件。
(2)不可以當作建構函式,也就是說,不可以使用new命令,否則會丟擲乙個錯誤。
(3)不可以使用arguments物件,該物件在函式體內不存在。如果要用,可以用 rest 引數代替。
(4)不可以使用yield命令,因此箭頭函式不能用作 generator 函式。
3.1基本用法:
var f = v => v;
//等價於
var f = function(a)
f(1); //1
3.1.1 使用箭頭函式前後對比
// 正常函式寫法
[1,2,3].map(function (x) );
// 箭頭函式寫法
[1,2,3].map(x => x * x);
3.2 沒有引數或者有多個引數
當箭頭函式沒有引數或者有多個引數,要用() 括起來。
var f = (a,b) => a+b;
f(6,2); //8
3.3 函式體有多行語句
當箭頭函式函式體有多行語句,用
{} 包裹起來,表示**塊,
當只有一行語句,並且需要返回結果時,可以省略 {} , 結果會自動返回。
varf= (a,b)=>
f(6,2); //8
3.4 函式要返回物件
當箭頭函式要返回物件的時候,為了區分於**塊,要用 () 將物件包裹起來
var f = (id,name) => ();
f(6,2); //
3.5 this 物件,是定義函式時的物件
箭頭函式體中的 this 物件,是定義函式時的物件,而不是使用函式時的物件。
var name = "the window";view codevar object =;}};
console.log(object.getnamefunc()())
//change
3.5.1 call 借用方法依然成立
functionfn(),0)
}vara= 20;
fn.call(); //18
3.5.2非同步**時,this 指向,不再需要中間變數轉換
普通函式
varperson= ); }};
varage= 20;
person.sayhello(); //20
箭頭函式
varperson1= {'age': 18, '
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我們只需要在引數上直接寫上我們想要的預設值就好了。當我們給函式乙...
ES6函式擴充套件
function fun a,b world fun hello 輸出helloworld let a aa function fun a,b a fun bb function fun arg fun 1,2,3,4,1 語法 param param 對應函式 function 沒有引數 乙個引數...