箭头函数与普通函数(function)的区别

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 箭头函数是ES6引入的新语法,相比传统函数表达式更简洁,且没有自己的this、arguments、super或new.target绑定,而是继承自外层作用域。这使得箭头函数在处理回调和闭包时更加灵活方便。
  1. 语法形式

    • 普通函数
      • 有函数声明和函数表达式两种形式。函数声明的语法是function functionName(parameters) {... },例如:
        function add(a, b) {
                 
          return a + b;
        }
        
      • 函数表达式是将函数赋值给一个变量,如let add = function(a, b) { return a + b; };
    • 箭头函数
      • 语法更加简洁,它的基本形式是(parameters) => {... }。如果只有一个参数,括号可以省略,例如a => { return a * 2; };如果函数体只有一条语句且是返回值,花括号和return关键字都可以省略,像a => a * 2
  2. this指向

    • 普通函数
      • this的值在函数被调用时确定,它取决于函数的调用方式。在全局作用域中调用函数,this指向全局对象(在浏览器环境中是window,在Node.js环境中是global)。例如:
        let obj = {
                 
          name: 'John',
          sayName: function() {
                 
            console.log(this.name);
          }
        };
        obj.sayName();// 'John',这里this指向obj
        let sayNameFn = obj.sayName;
        sayNameFn();// undefined,这里this指向全局对象(如果没有name属性就为undefined)
        
    • 箭头函数
      • 没有自己的this,它的this是继承自外层作用域的this。例如:
        let obj = {
                 
          name: 'John',
          sayName: () => {
                 
            console.log(this.name);
          }
        };
        obj.sayName();// 这里this指向外层作用域的this,可能不是obj
        
  3. arguments对象
    • 普通函数
      • 有自己的arguments对象,它是一个类数组对象,包含了函数被调用时传入的所有参数。例如:
        function sum() {
                 
          let result = 0;
          for (let i = 0; i < arguments.length; i++) {
                 
            result += arguments[i];
          }
          return result;
        }
        console.log(sum(1, 2, 3));// 6
        
    • 箭头函数
      • 没有自己的arguments对象。如果需要访问参数,可以使用剩余参数(...)语法。例如:
        let sum = (...args) => {
                 
          let result = 0;
          for (let i = 0; i < args.length; i++) {
                 
            result += args[i];
          }
          return result;
        };
        console.log(sum(1, 2, 3));// 6
        
  4. 构造函数
    • 普通函数
      • 可以作为构造函数使用,通过new关键字来创建对象实例。构造函数内部会创建一个新的对象(this),并将其原型指向函数的prototype属性。例如:
        function Person(name) {
                 
          this.name = name;
        }
        let john = new Person('John');
        console.log(john.name);// 'John'
        
    • 箭头函数
      • 不能作为构造函数使用,因为它没有自己的this,也没有prototype属性。如果尝试使用new关键字调用箭头函数,会抛出错误。例如:
        let Person = (name) => {
                 
          this.name = name;
        };
        let john = new Person('John');// 报错
        
  5. 适用场景
    • 普通函数
      • 适用于需要动态绑定this的场景,如对象的方法,构造函数等。当需要使用arguments对象或者需要通过new关键字创建对象实例时,也必须使用普通函数。
    • 箭头函数
      • 适用于简洁的函数表达式,特别是在不需要自己的thisarguments对象的场景。例如,在数组的mapfilterreduce等方法中作为回调函数使用,可以使代码更加简洁清晰。如let numbers = [1, 2, 3]; let doubled = numbers.map(num => num * 2);
相关文章
|
3月前
|
人工智能 Python
083_类_对象_成员方法_method_函数_function_isinstance
本内容主要讲解Python中的数据类型与面向对象基础。回顾了变量类型(如字符串`str`和整型`int`)及其相互转换,探讨了加法在不同类型中的表现。通过超市商品分类比喻,引出“类型”概念,并深入解析类(class)与对象(object)的关系,例如具体橘子是橘子类的实例。还介绍了`isinstance`函数判断类型、`type`与`help`探索类型属性,以及`str`和`int`的不同方法。最终总结类是抽象类型,对象是其实例,不同类型的对象有独特运算和方法,为后续学习埋下伏笔。
83 7
083_类_对象_成员方法_method_函数_function_isinstance
|
3月前
|
Python
[oeasy]python086方法_method_函数_function_区别
本文详细解析了Python中方法(method)与函数(function)的区别。通过回顾列表操作如`append`,以及随机模块的使用,介绍了方法作为类的成员需要通过实例调用的特点。对比内建函数如`print`和`input`,它们无需对象即可直接调用。总结指出方法需基于对象调用且包含`self`参数,而函数独立存在无需`self`。最后提供了学习资源链接,方便进一步探索。
89 17
|
3月前
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
78 11
|
8月前
|
中间件 Docker Python
【Azure Function】FTP上传了Python Function文件后,无法在门户页面加载函数的问题
通过FTP上传Python Function至Azure云后,出现函数列表无法加载的问题。经排查,发现是由于`requirements.txt`中的依赖包未被正确安装。解决方法为:在本地安装依赖包到`.python_packages/lib/site-packages`目录,再将该目录内容上传至云上的`wwwroot`目录,并重启应用。最终成功加载函数列表。
|
9月前
|
JavaScript
箭头函数与普通函数(function)的区别
箭头函数是ES6引入的新特性,与传统函数相比,它有更简洁的语法,且没有自己的this、arguments、super或new.target绑定,而是继承自外层作用域。箭头函数不适用于构造函数,不能使用new关键字调用。
|
9月前
|
数据可视化 开发者 索引
详解Wireshark LUA插件函数:function p_myproto.dissector(buffer, pinfo, tree)
在 Wireshark 中,LUA 插件通过 `function p_myproto.dissector(buffer, pinfo, tree)` 扩展协议解析能力,解析自定义应用层协议。参数 `buffer` 是 `PacketBuffer` 类型,表示原始数据包内容;`pinfo` 是 `ProtoInfo` 类型,包含数据包元信息(如 IP 地址、协议类型等);`tree` 是
364 1
|
9月前
|
C++ 容器
函数对象包装器function和bind机制
函数对象包装器function和bind机制
70 0
|
11月前
【Azure Durable Function】PowerShell Activity 函数遇见 Newtonsoft.Json.JsonReaderException: The reader's MaxDepth of 64 has been exceeded.
【Azure Durable Function】PowerShell Activity 函数遇见 Newtonsoft.Json.JsonReaderException: The reader's MaxDepth of 64 has been exceeded.
|
11月前
|
安全 JavaScript 应用服务中间件
【Azure Function App】如何修改Azure函数应用的默认页面呢?
【Azure Function App】如何修改Azure函数应用的默认页面呢?
|
11月前
|
C# C++ Python
【Azure 应用服务】Azure Durable Function(持久函数)在执行Activity Function时候,因为调用函数名称错误而导致长时间无响应问题
【Azure 应用服务】Azure Durable Function(持久函数)在执行Activity Function时候,因为调用函数名称错误而导致长时间无响应问题