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所造成的问题


相关文章
|
7月前
ES6之箭头函数
ES6之箭头函数
|
1月前
|
JavaScript
哪些场景适合使用 ES6 的箭头函数?
总之,当需要简洁地定义函数、处理回调函数、避免 `this` 指向问题以及进行函数式编程等场景时,ES6的箭头函数都是一个很好的选择。但需要注意的是,箭头函数也有一些限制,如不能作为构造函数使用等,在使用时需要根据具体情况进行选择。
|
1月前
|
安全 JavaScript 前端开发
es6 箭头函数
【10月更文挑战第26天】ES6箭头函数为JavaScript开发者提供了一种更简洁、更直观的函数定义方式,同时其独特的`this`绑定和无`arguments`对象等特性也使得在一些特定场景下的代码编写更加方便和安全,但在使用时也需要注意其与普通函数的区别,以确保正确地使用和理解箭头函数。
108 62
|
1月前
|
自然语言处理
ES6 中箭头函数和普通函数区别
【10月更文挑战第19天】这些仅是对箭头函数和普通函数区别的一些主要方面进行的详细阐述,实际应用中可能还会有更多具体的细节和情况需要进一步探讨和理解。可以根据自己的需求进一步深入研究和实践,以更好地掌握它们在不同场景下的应用。
35 2
ES6学习(4)箭头函数
ES6学习(4)箭头函数
|
7月前
|
小程序
es6学习笔记(四)箭头函数
es6学习笔记(四)箭头函数
|
7月前
Es6箭头函数
Es6箭头函数
66 0
|
网络架构
ES6箭头函数总结
ES6箭头函数总结
ES6箭头函数总结