ES6学习---箭头函数

1语法和格式

语法非常简洁,箭头就是这个样:=>

原来的函数写法:

function show(){

  return 1;

}

 

变成箭头函数:

let show=()=>1; 

 

箭头左边的括号就是这个括号:

  

1就是return1

 

说白了,就是箭头左边是参数,右边是返回值。函数名用变量表示。

例:

let show=(a,b)=>a+b;

console.log(show(1,2));

 

如果有多条语句:

()=>{

  语句;

  return

}

 

例:

let show=(a=1,b=2)=>{
    console.log(a,b);
    return a+b;
}
console.log(show());

 

2需要注意的几点

2.1 this问题

let json={
    id:1,
    show:function(){
        alert(this.id);
    }
}
json.show();

 

如果加个延迟:

let json={
    id:1,
    show:function(){
        setTimeout(function(){
            alert(this.id);
        },2000);        
    }
}
json.show();

 

这是因为setTimeout是由window执行的,所以里面的this就是windowwindow没有定义id(在全局中用var定义的才属于window,用letconst不属于),所以是undefined

 

用箭头函数就可以解决这个问题:

let json={
    id:1,
    show:function(){
        setTimeout(()=>{
            alert(this.id);
        },2000);
    }
}
json.show();

 

结论:

箭头函数中的this表示定义函数所在的对象,不再是运行时所在的对象。

 

2.2箭头函数中没有arguments

function fun1(){
    console.log(arguments);
}
fun1(1,2,3);

 

let show=()=>{
    console.log(arguments);
}
show(1,2,3);

 

可以用剩余参数...来解决:

let show=(...args)=>{
    console.log(args);
}
show(1,2,3);

 

2.3箭头函数不能当作构造函数

function show(){
    this.name='abc';
}
let fun=new show();
console.log(fun.name);

 

let show=()=>{
    this.name='abc';
}
let fun=new show();
console.log(fun.name);

posted @ 2019-12-15 21:26  后知后觉0107  阅读(157)  评论(0编辑  收藏  举报