箭头函数以及指向问题

1.普通函数改写箭头函数写法

/*
  let fn = function(a,b){
    return {x:a,y:b};
  } 
  */
// 改写为箭头函数:
// 1) function 替换为箭头
// 2)假如只有一个形参,则圆括号可省略。
// 3)假如只有一行代码,则大括号可省略
// 4)假如只有一行代码,并且是return语句,则return也可省略
// 5)假如只有一行代码,并且是return一个对象,为了避免歧义,则需要用圆括号包起来。
let fn = (a,b) => ({x:a,y:b});

例子 可以感受下

 let obj = {
   name:"jack",
   say:function(){
     console.log( this );
   }
 }

 obj.say()

2 箭头函数中this永远指向其外部最近的this (指向其外部环境)

<script>
  // 箭头函数中this永远指向其外部最近的this (指向其外部环境)
    console.log(this); //window
    btn.onclick = () => {
      console.log(this);
    }

</script>
<script>
    // 箭头函数中this永远指向其外部最近的this (指向其外部环境)
    function Person(){
      let fn = () => {
        console.log( this );
      }
      fn();
    }
// 当Person作为普通全局函数调用时,函数内部this指向window,那么箭头函数内this也指向window
    // Person(); // window

// 当Person作为构造函数使用时,构造函数内部this指向实例对象,那么箭头函数内部this也指向实例对象
    new Person();  // {}
</script>

再来感受一下  指向外部的this

<script>
  // 箭头函数中this永远指向其外部最近的this (永远指向其外部环境,环境只能是全局或函数内 )
  // 
/*   console.log( this );
  let obj = {
    name:"jack",
    // 箭头函数
    say:()=>{
      console.log( this );
    },
    // 普通函数的简写
    fn(){
      console.log( this );
    }
  }

  obj.say()
 */

  let obj = {
    name:"jack",
    oo:{
      name:"rose",
      fn(){
        // console.log(this);
        return {
          op:()=>{
            console.log( this.name );
          }
        }
      }
    }
  }

  let a = obj.oo.fn();
  a.op()

</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值