• javaScript---箭头函数和普通函数的区别


    1、定义区别:箭头函数语法比普通函数更加简洁

    普通函数使用关键字function定义

    箭头函数:如果没有参数,直接写一个();如果一个参数,可以省略()如果多个参数,逗号分割如果函数体中只有return返回语句或者只有一句代码,return和{}可以省略

    1. //普通函数
    2. const fn=function(){
    3. console.log(this)//Window
    4. }
    5. //箭头函数
    6. const fn1 = () => console.log(1);
    7. fn1(); //1
    8. const fn2 = a => console.log(a);
    9. fn2(2) //2
    10. const fn3 = (a, b, c) => a+b+c;
    11. var sum = fn3(1, 2, 3)
    12. console.log(sum);//6

    2this指向区别

    箭头函数没有自己的this,头函数内部 this 始终指向创建时所在作用域指向的对象。call,apply,bind方法改变不了箭头函数的指向。

    普通函数:直接调用时指向全局对象;方法调用时指向调用该方法的对象;new 调用时指向创建的对象实例;call、apply、bind 调用时,指向三种方法的第一个参数。

    1. const fn=function(){
    2. console.log(this)//Window
    3. }
    4. fn() //等价于Window.fn()
    5. let obj1 = {
    6. name: "Tom",
    7. sayHi:function() {
    8. console.log(this);//打印{ name: 'Tom', sayHi: [Function: sayHi] }
    9. }
    10. }
    11. obj1.sayHi()//this指向obj1对象
    12. // //构造函数
    13. function Person(name,age) {
    14. this.name = name
    15. this.age = age
    16. console.log(this);//打印 Person {name: 'Jerry', age: 12}
    17. }
    18. let p1=new Person("Jerry",12)
    19. //箭头函数没有自己的this,它的this来自上级作用域,call,apply,bind方法改变不了箭头函数的指向
    20. let obj2 = {
    21. name: "Tom",
    22. sayHi:()=> {
    23. console.log(this);//Window
    24. }
    25. }
    26. obj2.sayHi()//this指向Window对象

    javaSccript---call()、 bind()、 apply()的区别_javascropt call-CSDN博客

    3参数区别

    箭头函数不绑定 arguments 对象可以使用es6...rest参数代替arguments对象,来访问箭头函数的参数列表。如果在普通函数中嵌套箭头函数,并在箭头函数中访问arguments,实际上获得的是父作用域(函数)的arguments对象

    1. const fn = (val) => {
    2. console.log(val);//1
    3. console.log(arguments); //Uncaught ReferenceError: arguments is not defined
    4. }
    5. fn(1, 2)
    6. const fn1 = (...rest) => {
    7. console.log(rest);//[1,2]
    8. }
    9. fn1(1,2)
    10. const fn2= function(val){
    11. console.log(val);//1
    12. console.log(arguments); //Uncaught ReferenceError: arguments is not defined
    13. }
    14. fn2(1, 2)
    15. const fn3= function(val){
    16. let fn = () => {
    17. console.log(val);//1
    18. console.log(arguments);//Arguments(2) [1, 2, callee: ƒ, Symbol(Symbol.iterator): ƒ]
    19. }
    20. fn()
    21. }
    22. fn3(1,2)

    4、构造器

    箭头函数不能用作构造器,和 new一起用会抛出错误。

    为什么箭头函数不能用作构造器,和 new一起用会抛出错误。

    因为new的过程:1.开辟内存空间;2.this指向内存空间;3.执行构造函数;4.返回this实例但是箭头函数没有自己的this,它的this其实是继承了父作用域中的this,所以箭头函数不能作为构造函数使用

    1. const fn1 = function () { }
    2. let f1 = new fn1()
    3. const fn2 = () => { }
    4. let f2=new fn2() // Uncaught TypeError: fn2 is not a constructor

    5、原型

    箭头函数没有原型,原型是undefined

    1. const fn1 = function () { }
    2. console.log(fn1.prototype);
    3. const fn2 = () => { }
    4. console.log(fn2.prototype);//undefined

    6、箭头函数不能使用yield命令,因此箭头函数不能用作 Generator 函数。

  • 相关阅读:
    Windows10/11开启文件系统对大小写敏感
    【java】【重构一】分模块开发设计实战
    凡客平台数据接口,根据ID取商品详情,Onebound电商API
    Java Thread sleep(),wait()方法的不同之处简介说明
    3D应用开发引擎HOOPS如何促进AEC数字化架构革新?
    鸿蒙HarmonyOS实战-ArkUI组件(Canvas)
    KafKa 开启 SASL 验证
    云原生系列 【基于CCE Kubernetes编排实战二】
    FREERTOS内容解惑与综合应用(基于STM32F103)
    【cpu_entry_area mapping】SCTF2023-sycrop
  • 原文地址:https://blog.csdn.net/maidu_xbd/article/details/136368174