JavaScript技术js css html

ES6学习(4)箭头函数

2022-05-11  本文已影响0人  哆啦C梦的百宝箱
  1. ES6允许使用箭头(=>)定义函数,箭头函数提供了一种更加简洁的函数书写方式,箭头函数多用于匿名函数的定义。
  2. 箭头函数的this是静态的,始终指向声明该函数时所在的作用域指向的对象,而不是使用时所在的作用域指向的对象。
  3. 箭头函数不能作为构造函数进行实例化。
  4. 不能使用 arguments;
  5. 普通函数,谁调用,this就指向谁
var name = 'window'; // 其实是window.name = 'window'

var A = {
   name: 'A',
   sayHello: function(){
      console.log(this.name)
   }
}

A.sayHello();// 输出A

var B = {
  name: 'B'
}

A.sayHello.call(B);//输出B

A.sayHello.call();//不传参数指向全局window对象,输出window.name也就是window
  1. 改为箭头函数
var name = 'window'; 

var A = {
   name: 'A',
   sayHello: () => {
      console.log(this.name)
   }
}

A.sayHello();// 还是以为输出A ? 错啦,其实输出的是window
  1. 如何指向A呢,外面包一层函数
var name = 'window'; 

var A = {
   name: 'A',
   sayHello: function(){
      var s = () => console.log(this.name)
      return s//返回箭头函数s
   }
}

var sayHello = A.sayHello();
sayHello();// 输出A 

var B = {
   name: 'B';
}

sayHello.call(B); //还是A
sayHello.call(); //还是A
  1. 外层函数写成箭头函数,则this也变成了window
ad.addEventListener("click", function(){
    // ES6写法
    // 定时器:参数1:回调函数;参数2:时间;
    // 这个this才是ad
    setTimeout(() => this.style.background = 'pink',2000);
    }
)
//错误写法
ad.addEventListener("click", () => {
    setTimeout(() => this.style.background = 'pink',2000);
 })
//不使用箭头函数错误写法
ad.addEventListener("click", function(){
    setTimeout(function(){this.style.background = 'pink';},2000);
});
// 不使用箭头函数正常写法
ad.addEventListener("click", function(){
    let _this = this;
    setTimeout(function(){
        _this.style.background = 'pink';
    },2000);
});
  1. apply(),bind(),call()
上一篇下一篇

猜你喜欢

热点阅读