ES6——箭头函数以及this指向

简介: 箭头函数以及this指向

以前JavaScript写法:

function sum(num1, num2) {
    return num1 + num2;
  }

ES6箭头函数的写法:

const sum =(num1,num2)=>{
    return num1 + num2;
  }

更简化的写法

const sum = (num1, num2) => num1 + num2;
function(){}

等同于 :

()=>{} 
x => x * x
//相当于
function (x) {
    return x * x;
}

再看个同样的例子:

let func1 = function(){
    console.log('普通无参匿名函数');
  }
  func1();
  let func2 = ()=>{
    console.log('箭头函数');
  }
  func2();

如果是一条语句的话可以省略

let func3= ()=>console.log('我是另一个箭头函数');        
func3();

20210923103732295.png

如果是有参数的话:

/* let func3 = (a)=>console.log(a);
// 一个参数可以省略()最好写上
  func3('333');
let func4 = (a,b)=>console.log(a,b);
// 一个参数可以省略()最好写上
  unc4('444','213');
// let func5 = (a,b) => a+b;
// console.log(func5(1,5));
let func5 = (a,b) => {
  return a+b;
}
  console.log(func5(1,5));

20210923103945945.png

箭头函数中的this:

重要特性:箭头函数没有this,所以this是定义的时候,外部所在的对象是他的this。调用的时候的this也没有arguments值;

当在函数中使用一个变量的时候,首先在本函数内部查找这个变量,如果找不到那就去找他的父级函数,依次往上推,最后到window对象,全局变量默认挂载是在window对象下的

console.log(this);        
let obj = {
x: 100, //属性x
  show() {
   console.log(this);
//延迟500毫秒,输出x的值
   setTimeout(function () {
console.log(this.x);//因为这里的setTimeout的this指向的是window对象,而在window中并没有找到x,所以返回undefined
      }, 500)
    }
};
obj.show();     //undefined

20210923110043592.png

如果是使用箭头函数的话就会改变this的指向

console.log(this);
var obj = {
    x: 100, //属性x
        show() {
            //延迟500毫秒,输出x的值
            setTimeout(() => {
                console.log(this);
                console.log(this.x);
            }, 500);
        },
    };
    obj.show(); //打印结果:100

当定义obj的show( )方法的时候,我们在箭头函数编写this.x,此时的this是指的obj,所以this.x指的是obj.x。而在show()被调用的时候,this依然指向的是被定义时候所指向的对象,也就是obj对象,故打印出:100。

证明了一个观点:

箭头函数中的this指向的是定义时的this,而不是执行时的this

箭头函数中不绑定this,箭头函数中的this指向是它所定义的位置,可以简单理解成,定义箭头函数中的作用域的this指向谁,它就指向谁

箭头函数的优点在于解决了this执行环境所造成的一些问题。比如:解决了匿名函数this指向的问题(匿名函数的执行环境具有全局性),包括setTimeout和setInterval中使用this所造成的问题


相关文章
|
2月前
ES6之箭头函数
ES6之箭头函数
|
2月前
|
小程序
es6学习笔记(四)箭头函数
es6学习笔记(四)箭头函数
|
4月前
Es6箭头函数
Es6箭头函数
36 0
|
9月前
|
前端开发
面试官:箭头函数和普通函数的区别?箭头函数的this指向哪里?(二)
面试官:箭头函数和普通函数的区别?箭头函数的this指向哪里?(二)
|
9月前
普通函数中的this指向问题解决方案箭头函数
普通函数中的this指向问题解决方案箭头函数
26 0
|
6月前
|
前端开发
ES6系列笔记-箭头函数
ES6系列笔记-箭头函数
17 1
面试官:箭头函数和普通函数的区别?箭头函数的this指向哪里?(一)
面试官:箭头函数和普通函数的区别?箭头函数的this指向哪里?(一)
|
11月前
【ES6】 箭头函数
【ES6】 箭头函数
32 0
|
12月前
ES6定义变量与箭头函数
详解ES6定义变量与箭头函数
|
网络架构
ES6箭头函数总结
ES6箭头函数总结
ES6箭头函数总结