ES6新特性(一):箭头函数

语法

箭头函数相当于匿名函数

  • 没有参数,单条语句
var f = ()=>{console.log("hello")}
f();
  • 只有一个参数,单条语句
var f =  (x)=>{console.log(x)}
f(1);

// 如果只有一个参数,可以省略括号: 
var f =  x =>{console.log(x)}
f(1);

//如果返回值仅仅只有一个表达式(expression), 还可以省略大括号: 
var f =  x => console.log(x)
f(1);
  • 多个参数,多条语句
// 可变参数:
   var f =  (x,y,...rest)=>{
          var i,sum = x+y;
          for(i=0;i<rest.length;i++){
              console.log(rest[i]);  // 3,4
              sum += rest[i];
          }
          console.log(sum); // 10
      }
     f(1,2,3,4);

 

箭头函数内部的this是词法作用域,由上下文确定

我们现在希望利用setTimeout来增加num的值,但是输出的结果是NaN。现在我们来思考下这个问题,首先函数setTimeout没有被某个声明的对象调用,也没有使用new关键字,再之没有使用bind, call和apply。setTimeout只是一个普通的函数。它里面的this绑定到全局对象的。this.num++是针对window对象的num,而window.num未定义。(通过new运算符来调用函数时,函数被当做一个构造函数,this指向构造函数创建出来的对象,所以num是绑定到a这个对象上的。)

  function a(){
       this.num = 0;
       console.log(this);  // a
       setTimeout(function add() {
           console.log(this);   //window
           console.log(this.num++);   //NaN
       }, 1000);
   }
   var c = new a();

使用箭头函数!使用箭头函数就可以让this总是指向词法作用域,也就是外层调用者

 function a(){
            this.num = 0;
            console.log(this);  // a
            setTimeout(()=>{
                console.log(this.num++);
            },1000)
        }
        var c = new a();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_21439711

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值