函數擴展
函數參數的默認值
{
function test(x, y = 'world') {
console.log(x, y);
}
test('hello'); // hello world
test('hello', 'can'); // hello can
}
參數的做用域
{
let x = 'hi';
function test2(x, y = x) {
console.log(x, y);
}
function test3(a, y = x) {
console.log(a, y);
}
test2('can'); // can can
test3('can'); // can hi
}
rest的參數
{
// ...arg將全部參數轉換爲數組 ...表示rest參數
function test4(...arg) {
for (let v of arg) {
console.log(v);
}
}
test4(1, 2, 3, 'a'); // 1 2 3 'a'
// 擴展運算符
console.log(...[1, 2, 4]); // 1 2 4
}
箭頭函數
{
let fn = arg => arg * 2; // 只有一個參數能夠省略()
let fn2 = () => 5; // 沒有參數寫()
// 當返回值爲對象時,用()包住返回值,否則會報錯
let fn3 = (name, age) => ({name, age});
console.log(fn(3)); // 6
console.log(fn2()); // 5
console.log(fn3('can', 18)); // {name: "can", age: 18}
// 注意,使用箭頭函數時,注意this的指向
}
函數尾調用
{
// 判別是否函數尾調用的方法:函數的最後一個語句是否是一個函數
// 當函數嵌套過多,當一個函數依賴另外一個函數時,可以使用尾調用優化性能
function test(x) {
console.log(x);
}
function fn(x) {
return test(x); // 尾調用,最後的語句是函數
}
fn(123); // 123
}