函數(shù)新增特性
- 參數(shù)默認(rèn)值
- rest參數(shù)
- 擴(kuò)展運(yùn)算符
- 箭頭函數(shù)
- this綁定
- 尾調(diào)用
參數(shù)默認(rèn)值
注意:默認(rèn)值后面必須都是帶默認(rèn)值的變量
{
function test(x, y = 'world'){ // 默認(rèn)值后面必須都是帶默認(rèn)值的變量
console.log('默認(rèn)值',x,y);
}
test('hello'); // hello world
test('hello','kill'); // hello kill
}
參數(shù)默認(rèn)值的作用域問題
{
let x='test';
function test2(x,y=x){
console.log('作用域',x,y);
}
test2('kill'); // kill kill
test2() // undefined undefined振乏,形參x只聲明未賦值
function testTwo(c,y=x){
console.log('作用域',c,y);
}
testTwo('kill') // kill test蔗包,這里取到外級(jí)作用域了
}
rest參數(shù)
{
function test3(...arg){ // ...把參數(shù)轉(zhuǎn)成數(shù)組,和es5中的arguments相似慧邮,但不會(huì)有arguments[0]的問題
for(let v of arg){ // rest參數(shù)后不能有其他參數(shù)调限,會(huì)報(bào)錯(cuò)
console.log('rest',v);
}
}
test3(1,2,3,4,'a'); // 1 2 3 4 a
}
擴(kuò)展運(yùn)算符
rest 參數(shù)逆運(yùn)算
{
console.log(...[1,2,4]); // 1 2 4,把數(shù)組轉(zhuǎn)成離散的值
console.log('a',...[1,2,4]); // a 1 2 4
}
箭頭函數(shù)
{
let arrow = v => v*2;
let arrow2 = () => 5;
console.log('arrow',arrow(3)); // 6
console.log(arrow2()); // 5
}
注意 this 綁定的問題
尾調(diào)用
尾調(diào)用误澳,函數(shù)的最后一句話是函數(shù)
作用耻矮,提升性能
場(chǎng)景,函數(shù)嵌套時(shí)
{
function tail(x){
console.log('tail',x);
}
function fx(x){
return tail(x)
}
fx(123) // 123
}