es6学习四:函数相关扩展

参数默认值:

before:

function foo(param){
    let p = param || 'hello';
    console.log(p);
}
foo('hi');

now:

function foo(param = 'nihao'){
    console.log(param);
}
foo('hello kitty');

参数解构赋值:

function foo(uname='lisi',age=12){
    console.log(uname,age);
}
foo('zhangsan',13);

function foo({uname='lisi',age=13}={}){
    console.log(uname,age);
}
foo({uname:'zhangsan',age:15});

rest参数(剩余参数):

function foo(a,b,...param){
    console.log(a);
    console.log(b);
    console.log(param);
}
foo(1,2,3,4,5);

扩展运算符 (与上面相反)...:

before:

function foo(a,b,c,d,e,f,g){
    console.log(a + b + c + d + e + f + g);
}
let arr = [1,2,3,4,5,6,7];
foo.apply(null,arr);

now:

function foo(a,b,c,d,e,f,g){
    console.log(a + b + c + d + e + f + g);
}
let arr = [1,2,3,4,5,6,7];
foo(...arr);

应用(合并数组):

// 合并数组
let arr1 = [1,2,3];
let arr2 = [4,5,6];
let arr3 = [...arr1,...arr2];//扩展运算符相当于把数组拆开了
console.log(arr3);

箭头函数:

基本使用:

  • 函数无参数:

before:

function foo(){
    console.log('hello');
}
foo();

now:

let foo = () => console.log('hello');
foo();

  • 函数有1个参数

before:

function foo(v){
    return v;
}
let ret = foo(111);
console.log(ret);

now:

function foo(v){
    return v;
}
let foo = v => v;

  • 函数有多个参数
let foo = (a,b) => {let c = 1; console.log(a + b + c);}
foo(1,2);

  • 匿名函数
let arr = [123,456,789];
arr.forEach(function(element,index){
    console.log(element,index);
});
arr.forEach((element,index)=>{
    console.log(element,index);
});

es6学习四:函数相关扩展_第1张图片

注意事项:

1、箭头函数中this取决于函数的定义,而不是调用

function foo(){
    // 使用call调用foo时,这里的this其实就是call的第一个参数
    // console.log(this);
    setTimeout(()=>{
        console.log(this.num);
    },100);
    setTimeout(function(){
        console.log(this.num);
    },200);
}
foo.call({num:1});

2、箭头函数不可以new,不可以作为构造函数

let foo = () => { this.num = 123;};
new foo();

es6学习四:函数相关扩展_第2张图片

3、箭头函数不可以使用arguments获取参数列表,可以使用rest参数代替

let foo = function(a,b){
    console.log(a,b);
    console.log(arguments);//这种方式获取不到实参列表
}
foo(123,456);

let foo = (a,b) => {
    console.log(a,b);
    console.log(arguments);//这种方式获取不到实参列表
}
foo(123,456);

es6学习四:函数相关扩展_第3张图片

通过rest参数:

let foo = (...param) => {
    console.log(param);
}
foo(123,456 );

 

你可能感兴趣的:(es6)