es6——箭头函数

箭头函数的语法

参数=>函数体

变式如下:



更多语法细节

1)宽松绑定

箭头函数的优先级作为运算符,是优先级最低的一个运算符


2)函数体味表达式或语句

函数体为表达式时不用大括号,函数体为语句时需要大括号,表达式是

用来生成值的,语句时用来做事情的.

//函数体不需要大括号包裹
const f1 = x => console.log(x);
//函数体不需要大括号包裹
const f2 = x => typeof x;
//函数体需要大括号包裹
const f3 = x =>{throw x};

3)返回对象

前面讲到,返回对象,一定要加括号,不然会报语法错误,但还有一种情况

const f1 = x =>({bar:123});
f1(); //{bar:123}

const f2 = x =>{bar:123};
f2();//undefined

f1返回的是一个正确的对象,f2中的大括号被当做了箭头函数的大括号,而函数体,只有bar:123,bar作为label,

123作为value,符合js语法,因此没有报错。



箭头函数和普通函数的重要区别

1)没有自己的this(最重要的特性)、super、arguments和new.target,它们是离该箭头函数最近的非箭头函数的绑定;

箭头函数中的this与普通函数中的this比较

let obj = {
  name:'john',
  getName(){
    setTimeout(function(){
      console.log(this.name);
    },1000);
  }
};
obj.getName();

在getName这样的异步函数中的this指向的是全局对象window,而我们常常要取obj的name,就需要

第一种方法:
let that = this;
setTimeout(function(){
  console.log(that.name);},1000)
第二种方法:
setTimeout(function(){
  console.log(this.name);
}.bind(this),1000);

但在箭头函数就完全用不着这些繁琐的方法了,因为箭头函数本身是没有this的,它的this本就绑定在obj上,因此只要

  setTimeout(() => {
    console.log(this.name);
  },1000);

就可以了,相对普通函数来说,就要方便很多了,如果你的开发环境支持es6,就没有理由不使用箭头函数了

2)内部的this无法改变(bind/apply/call对this都没有影响,但仍可传递参数);

 setTimeout(() => {
      console.log(this.name);
    }.bind(null),1000);

这种情况下,仍旧会报SyntaxError的错误。

3)不能使用new来调用(不能用作构造函数,这样让箭头函数更加纯粹,js引擎就能对它进行更好的优化了)。

4)没有原型对象;

5)形参名称不能重复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值