博客列表 >ES6 箭头函数和this

ES6 箭头函数和this

Lon
Lon原创
2021年09月29日 17:46:11690浏览

ES6 箭头函数和this

了解更多请访问https://www.bilibili.com/video/BV1QE411q7C2

一.箭头函数

1、ES6 新增了一个使用(=>)箭头符号定义函数的语法特性

  1. // 传统函数代码写法
  2. let fn = function(name){
  3. return name;
  4. }
  5. //ES6箭头函数写法
  6. let fn = name => name;
  7. console.log(fn('Mr.Lon'));

从例子我们可以看出,省略了function,花括号‘{}’用‘=>’代替了。这种写法更简洁了。

2、箭头函数也可以传递两个或以上的参数,并实现运算后返回

  1. let fn = (x , y) => x + y;
  2. console.log(fn(10,20));
  3. //翻译成函数代码为
  4. let fn = function(x,y){
  5. return x + y;
  6. }

3、如果你定义的函数,并不需要传递参数,可以用()括号方式直接返回

  1. let fn = () => 'Mr.Lon';
  2. console.log(fn());
  3. //翻译成函数代码为
  4. let fn = function(){
  5. return 'Mr.Lon';
  6. }

4、如果函数体需要更复杂的操作,可以将箭头符号右边使用传统函数体

  1. let fn = (x , y)=>{
  2. return x + y;
  3. }
  4. console.log(fn(10 , 20))

5、如果箭头符号右边是对象,返回的是对象,则需要用圆括号包含着

  1. let fn = name => ({name : name , age : 100})
  2. console.log(fn('Mr.Lon').name)
  3. //翻译成函数代码为
  4. let fn = function(name){
  5. return{
  6. name : name,
  7. age : 100
  8. }
  9. }

6、自我立即执行函数,也可以使用箭头符号来创建,具体如下:

  1. ((name) => {
  2. console.log(name);
  3. })('Mr.Lon')
  4. //翻译成函数代码为
  5. (function(name){
  6. console.log(name);
  7. })('Mr.Lon')

二.绑定 this

1、ES6 之前有一个比较头疼的问题,就是 this 指向的问题,比如下面例子

  1. let obj = {
  2. name : 'Mr.Lon',
  3. age : 100,
  4. fn : function(){
  5. setTimeout(function(){
  6. console.log(this.name + ',' + this.age)
  7. }, 500);
  8. }
  9. }
  10. obj.fn()

上面的例子比较典型,this 全局指向 window,在某个对象内部指向当前对象
当 obj 对象下包含了类似 setTimeout 函数内部,这时 this 指向就出现问题了
Web 环境下,它指向了 Window,而 node 环境下它指向 setTimeout
所以,我们通俗的做法,就是将 this 在 setTimeout 外部进行赋值保存

  1. let obj = {
  2. name : 'Mr.Lon',
  3. age : 100,
  4. fn : function(){
  5. /*
  6. 在setTimeout里面,如果我们直接写this的话,这个this是指向window的。
  7. 因此我们需要在setTimeout函数之前先保存that = this;
  8. */
  9. let that = this;
  10. setTimeout(function(){
  11. console.log(that.name + ',' + that.age)
  12. }, 500);
  13. }
  14. }
  15. obj.fn()

箭头函数的出现,彻底解决了 this 在内部指向的问题,直接指向我们所需要;
因为,箭头函数中的 this 是最外层定义的函数绑定,不受内部影响;

  1. let obj = {
  2. name : 'Mr.Lee',
  3. age : 100,
  4. fn : function(){
  5. setTimeout(() => {
  6. console.log(this.name + ',' + this.age)
  7. }, 500);
  8. }
  9. }
  10. obj.fn()

三、箭头扩展

1、箭头也支持一些内置函数的使用,比如 sort()排序;

  1. let arr = [3,1,2].sort((a,b) => a - b);
  2. console.log(arr)
  3. //翻译后的代码为:
  4. let arr = [3,1,2].sort(function(a,b){
  5. return a - b;
  6. });

2、箭头函数不支持 arguments 绑定,请直接使用…other 模式(rest 运算符);

  1. //下面这种写法不支持
  2. let fn = (x , y) =>{
  3. return arguments[0] + arguments[1]
  4. }
  5. //不确定参数,使用...
  6. let fn = (...other) => {
  7. return other[0] + other[1]
  8. }
  9. console.log(fn(10,20))
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议