箭头函数和普通函数的区别

一,箭头函数基本用法:
箭头函数 伪代码 类似 函数表达式, 大多数用于  声明一些回调函数,简单 明了 

 const  fn = (name)=>{
    // do some other things
      return `hello ${name}`
}

伪代码 等同于 
const fn = function(name){
     // do some other things
      return `hello ${name}`
}

 关于箭头函数的参数,

1.  如果没有参数,  可以直接用()即可;
2. 如果有一个参数,可以省去包裹参数的();
3. 如果参数有多个 ,和正常的函数声明传参一致,用,分隔包裹在 (,)中;

关于箭头函数的函数体;
 1. 如果函数体只有一句 代码,就是简单的返回一个变量或者一个js  表达式,可以直接省略  {};
 2.  如果函数体 只有一句代码, 就是返回一个js 对象 ,需要用写形如:({})

1.
 const fn =  x=>x*x;
2. const  fn =x =>({a:x});
 //   写成下面这样会报错 ,{} 会被解释为函数体的大括号 ;

 const fn = x =>{a:x}

 二..   箭头函数与普通函数的区别 ;
  1.箭头函数不会创建自己的this(重要!!深入理解!!)
   MDN  上的解释 : 箭头函数不会创建自己的this,所以它没有自己的this,它只会从自己的作用域链的上一层继承this。 
   感觉并没有介绍的很清晰, 实际操作中 ,箭头函数本没有自己的this  , 它会捕获 声明中的this  并继承这个this , 在函数声明过程中就已经确定了这个this ,后续不可改变;

var id = 全局';

function fun1() {
    // setTimeout中使用普通函数
    setTimeout(function(){
        console.log(this.id);
    }, 2000);
}

function fun2() {
    // setTimeout中使用箭头函数
    setTimeout(() => {
        console.log(this.id);
    }, 2000)
}

fun1.call({id: '当前'});     // '全局'

fun2.call({id: '当前'});     // '当前'
 

 fn1 中 settimeout 使用普通函数,  2秒钟 后定时器回调执行,此时回调函数 是在全局中执行的,回调函数this 指向全局window  , 
  fn2 中,settimeout 使用箭头函数,  fn2   执行时候   内部的this  指向{id:'当前'},此时内部创建定时器以及回调,回调中的this 指针 指向  fn2 作用域中的this ,即{id:'当前'};

2. .call()/.apply()/.bind()无法改变箭头函数中this的指向 
     箭头函数中的this  只在定义的时候决定, 一经生成,其他时刻不在改变;(对,就是这么霸道)
 
3. 箭头函数不能作为构造函数使用,
       构造函数的特性: 构造函数在实例化过程中,会改变内部的this 指向,改变实例中的属性。
    因为箭头函数没有自己的this ,  只在定义时继承外部的this ,不会随着在哪里调用,被谁调用而改变,所以箭头函数不能用作构造函数,如用new 实例化 ,会报错
4. 箭头函数内部没有 arguments 对象,  可以在箭头函数中使用rest参数代替arguments对象,来访问箭头函数的参数列表!!

const fn =(...rest)=>{
    //  rest  is array  ,can do somethings 
}

5.、箭头函数没有原型prototype 

6. 箭头函数 不能用作 Generator ,内部不能用yelid 关键字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值