首页 > 其他分享 >箭头函数与普通函数的区别

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

时间:2022-09-29 23:33:45浏览次数:41  
标签:函数 区别 作用域 rest 箭头 arguments name

一、声明方式不同

  • 声明一个普通函数需要使用关键字function来完成,并且使用function既可以声明成一个具名函数也可以声明成一个匿名函数
  • 声明一个箭头函数则只需要使用箭头就可以,无需使用关键字function,比普通函数声明更简洁。
  • 箭头函数只能声明成匿名函数,但可以通过表达式的方式让箭头函数具名
二、this指向不同 对于普通函数来说,内部的this指向函数运行时所在的对象,但是这一点对箭头函数不成立。 它没有自己的this对象,内部的this就是定义时上层作用域中的this。也就是说,箭头函数内部的this指向是固定的,相比之下,普通函数的this指向是可变的。 箭头函数里面根本没有自己的this,而是引用的上层作用域中this。 我们可以用call、apply、bind来改变普通函数的this指向,但是由于箭头函数的this指向在它定义时就已经确定了,永远指向它定义时的上层作用域中的this,所以使用这些方法永远也改变不了箭头函数this的指向。 三、箭头函数没有原型prototype,箭头函数不能当成一个构造函数 我们知道new内部实现其实是分为以下四步:
  • 新建一个空对象

  • 链接到原型

  • 绑定this,执行构造函数

  • 返回新对象

function myNew() { // 1.新建一个空对象 let obj = {} // 2.获得构造函数 let con = arguments.__proto__.constructor // 3.链接原型 obj.__proto__ = con.prototype // 4.绑定this,执行构造函数 let res = con.apply(obj, arguments) // 5.返回新对象 return typeof res === 'object' ? res : obj } 四、箭头函数没有自己的arguments,箭头函数处于全局作用域中,则没有arguments

普通函数能够打印出arguments,箭头函数使用arguments则会报错,因为箭头函数自身是没有arguments的,然后它会往上层作用域中去查找arguments,由于全局作用域中并没有定义arguments,所以会报错。

箭头函数处于普通函数的函数作用域中,arguments则是上层普通函数的arguments

可以使用rest参数代替 ES6 引入 rest 参数,用于获取函数不定数量的参数数组,这个API是用来替代arguments的,形式为...变量名,rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中

rest参数与arguments的比较:

  • 箭头函数和普通函数都可以使用rest参数,而arguments只能普通函数使用
  • 接受参数restarguments更加灵活
  • rest参数是一个真正的数组,而arguments是一个类数组对象,不能直接使用数组方法
五、箭头函数不能重复函数参数名称
function fn(name,name) { console.log('fn2:',name) } let fn2 = (name,name) => { console.log('fn',name) } fn('nan','jiu') // 'jiu' fn2('nan','jiu') // 报错

标签:函数,区别,作用域,rest,箭头,arguments,name
From: https://www.cnblogs.com/xl15/p/16743499.html

相关文章

  • @RequestParam和@RequestBody区别
    @RequestParam接收的参数是来自requestHeader中,即请求头@RequestParam用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容@RequestBody接收的......
  • 网络字节序与主机字节序的转换函数实践
    网络字节序:网络字节序,是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big......
  • 有趣的函数
    #include<stdio.h>intmain(){printf("%d",printf("%d",printf("%d",43)));}结果如图所示为什么是4321那?此题涉及两个知识1.回调函数2.printf的返回值要知道先执行再......
  • TCP与UDP的联系与区别
    TCP与UDP的联系:1、TCP和UDP是OSI模型中的运输层中的协议。2、TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的bai通信传输。TCP与UDP的基本区别:1、基......
  • http的请求方式有哪些?get和post区别?
    HTTP1.0定义了三种请求方法:GET,POST和HEAD方法。HTTP1.1新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法。1、OPTIONS返回服务器针对特定资源所支持......
  • 指数族函数
    指数族函数待完善作者查阅了一些资料,全是公式函数名也陌生,所以这部分一直进行不下去。其实不用怕,只是提出了一类分布,这一类分布遵循着一些性质,具体推导过程甚至可以不了......
  • CSS空心箭头
    使用before和after伪类实现空心箭头//主要利用before和after的边框实心箭头,通过绝对定位覆盖完成看上去像空心箭头的设计.dom{display:inline-block;position:......
  • WeakHashMap和HashMap的区别
    看Java源码的时候,看到了 WeakHashMap,我一直以来使用的都是HashMap,于是查了一下两者的区别(一) 查看API文档,WeakHashmap要点如下:1.以弱键实现的基于哈希表的Map。在......
  • SAP License:ERP系统和电商系统的区别?
    互联网时代的到来,使得电商企业发展逐渐兴起,企业的多样化发展,企业的管理也在不断的改进,那么​​ERP系统​​​也将随之不断发展,那么ERP系统和​​电商系统​​到底有什么相同......
  • 鱼传科技:函数计算,只要用上就会觉得香
    简介: 复杂交互小程序如何应对访问量激增?深圳鱼传科技有限公司是专注以精准营销和互联网生态产品运营为核心的综合互联网营销推广服务商。通过整合全网优质媒体......