箭头函数(Arrow Functions)和普通函数(传统函数)在 JavaScript 中有显著的区别,主要体现在语法、this 的绑定、构造函数行为、参数处理等方面。以下是详细对比:

1. 语法差异

  • 普通函数

    function add(a, b) {
    return a + b;
    }

    或函数表达式:

    const add = function(a, b) {
    return a + b;
    };
  • 箭头函数(更简洁):

    const add = (a, b) => a + b; // 省略 return 和大括号(单行返回)

    或:

    const add = (a, b) => {
    return a + b;
    };

2. this 的绑定

  • 普通函数
    • this 是动态绑定的,取决于函数的调用方式。
    • 例如:
      function sayHello() {
      console.log(`Hello, ${this.name}`);
      }
      const person = { name: "Alice" };
      sayHello.call(person); // 输出 "Hello, Alice"(通过 call 显式绑定)
  • 箭头函数
    • 没有自己的 this,继承自外层作用域(词法作用域)。
    • 例如:
      const person = {
      name: "Alice",
      sayHello: function() {
      setTimeout(() => {
      console.log(`Hello, ${this.name}`); // 这里的 this 继承自 sayHello 的 this
      }, 100);
      },
      };
      person.sayHello(); // 输出 "Hello, Alice"
    • 如果用普通函数,this 会丢失:
      const person = {
      name: "Alice",
      sayHello: function() {
      setTimeout(function() {
      console.log(`Hello, ${this.name}`); // 这里的 this 是 window/undefined(严格模式)
      }, 100);
      },
      };
      person.sayHello(); // 输出 "Hello, undefined" 或报错

3. 构造函数

  • 普通函数
    • 可以作为构造函数,用 new 调用:
      function Person(name) {
      this.name = name;
      }
      const alice = new Person("Alice");
  • 箭头函数
    • 不能作为构造函数,用 new 调用会报错:
      const Person = (name) => {
      this.name = name; // 报错:箭头函数不能用作构造函数
      };
      const alice = new Person("Alice"); // TypeError: Person is not a constructor

4. arguments 对象

  • 普通函数
    • 有 arguments 对象,包含所有传入参数:
      function sum() {
      console.log(arguments); // 类似数组的对象
      }
      sum(1, 2, 3); // 输出 [1, 2, 3]
  • 箭头函数
    • 没有 arguments 对象,但可以通过剩余参数(...args)模拟:
      const sum = (...args) => {
      console.log(args); // [1, 2, 3]
      };
      sum(1, 2, 3);

5. prototype 属性

  • 普通函数
    • 有 prototype 属性,可用于添加方法:
      function Person() {}
      Person.prototype.sayHello = function() {
      console.log("Hello");
      };
  • 箭头函数
    • 没有 prototype 属性
      const Person = () => {};
      console.log(Person.prototype); // undefined

6. 适用场景

  • 普通函数
    • 需要动态 this 的场景(如对象方法、事件回调)。
    • 需要作为构造函数。
    • 需要 arguments 对象。
  • 箭头函数
    • 简化回调函数(如 mapfiltersetTimeout)。
    • 需要固定 this 的场景(如 Vue/React 中的方法)。
    • 代码更简洁。

总结表

特性普通函数箭头函数
语法function() {}() => {}
this 绑定动态绑定(取决于调用方式)继承自外层作用域(词法作用域)
构造函数可以(new 调用)不可以(报错)
arguments没有(可用 ...args 替代)
prototype没有
适用场景动态 this、构造函数简化回调、固定 this

选择建议

  • 如果需要动态 this 或构造函数,用普通函数。
  • 如果需要简洁语法或固定 this,用箭头函数。
  • 在 Vue/React 中,方法通常用箭头函数或绑定 this,避免 this 丢失问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/911926.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/911926.shtml
英文地址,请注明出处:http://en.pswp.cn/news/911926.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统日志与守护进程开发实战指南

Linux系统日志与守护进程开发实战指南 系统日志与守护进程 ├── 系统日志syslog │ ├── 日志路径: /var/log/syslog │ └── 核心API │ ├── openlog │ ├── syslog │ └── closelog └── 守护进程daemon└── 创建步骤├── um…

Vue.js 过滤器详解

Vue.js 过滤器详解 下面我将详细讲解Vue.js中过滤器的语法和使用注意事项,并提供一个完整的演示页面。 过滤器基本概念 在Vue.js中,过滤器(Filters) 是用于文本格式化的功能,可以在双花括号插值和v-bind表达式中使用…

【iOS】iOS崩溃总结

【iOS】iOS崩溃总结 一、前言 之前写了一篇博文《【Flutter】程序报错导致的灰屏总结》,浏览量、收藏率和点赞量还挺高,还被收录了,就想着总结一下iOS崩溃,这个也是在iOS面试中经常被问到的。 在 iOS 开发过程中,导致…

机器学习:特征向量与数据维数概念

特征向量与数据维数概念 一、特征向量与维数的定义 特征向量与特征类别 在机器学习和数据处理中,每个样本通常由多个特征(Feature) 描述。例如,一张图片的特征可能包括颜色、形状、纹理等;一个客户的特征可能包括年龄…

开发基于Jeston Orin Nx 开发版 16G的实现

一、基本配置 1.配置参数 密码:yahboom Ubuntu 20.04版本、python3.8、CUDA11.4、cuDNN8.6、TensorRT8.5、Jetpack5.1.1、Opencv4.5.4版本 终端输入命令:sudo jtop 其中Jetpack是英伟达提供的专门供它自己的嵌入式计算机平台使用的人工智能包。 终…

【技术分享】XR技术体系浅析:VR、AR与MR的区别、联系与应用实践

XR技术体系浅析:VR、AR与MR的区别、联系与应用实践 作者:EQ 雪梨蛋花汤 本文是技术分享文档,浅析VR(虚拟现实)、AR(增强现实)、MR(混合现实)的定义、特性、技术演进路线&…

R语言入门课| 05 一文掌握R语言常见数据类型

视频教程 大家可以先做一做R语言基础小测验,看看自己是否需要跟我们5.5h入门R语言的课程。 先上教程视频,B站同步播出: https://www.bilibili.com/video/BV1miNVeWEkw 完整视频回放和答疑服务可见:5.5h入门R语言 本节课程视频…

vRDMA 发布,助力云上 VPC 内高性能通信

资料来源:火山引擎-开发者社区 近日,火山引擎基于部分云服务器实例规格邀测发布 vRDMA 特性,提供云上 VPC 内大规模 RDMA 加速能力,可兼容传统 HPC 应用、AI 应用以及传统 TCP/IP 应用,降低大众化场景的适配门槛&#…

Win10安装dify

一、win10虚拟化设置,控制面板中开启如下三个服务 二、检查确认wls服务开启 设置自动启动并启动 确认服务开启 bcdedit 是否为auto,如果不是,设置为auto bcdedit /set hypervisorlaunchtype autocpu是否为虚拟化 更新wsl wsl --update二 …

【ai学习笔记】GitLab

CI/CD(持续集成/持续交付)是现代软件开发中的关键实践,通过自动化工具可以大幅提升开发效率和软件质量。下面为你介绍CI/CD的核心概念、常用工具以及示例配置: 1. CI/CD 核心概念 持续集成(CI)&#xff1…

Solidity 从 0 到 1 |Web3 开发入门免费共学营

开启你的 Web3 开发之旅,从 Sonic 开始! 想进入区块链开发的世界,却不知道从哪里开始?选择对的语言和平台,才能事半功倍。 Solidity 是 Web3 中最主流、最通用的智能合约开发语言,被广泛应用于以太坊及其…

【unitrix】 4.4 类型级整数比较系统(cmp.rs)

一、源码 这段代码实现了一个类型级别的整数比较系统,允许在编译时进行整数比较操作。它定义了一套类型来表示比较结果,并为不同类型的整数实现了比较逻辑。 use core::cmp::Ordering; use core::default::Default; use crate::sealed::Sealed; use cr…

2025年渗透测试面试题总结-2025年HW(护网面试) 14(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 1. SQL注入原理 💥 2. XXE攻击(XML外部实体注入) 🧩 3. SQ…

Android开发根据滑动距离标题栏进行渐变

Android开发根据滑动距离标题栏进行渐变 假设滑动控件是NestedScrollView。 先监听NestedScrollView的滑动距离: nslv_preview_me.setOnScrollChangeListener(object :NestedScrollView.OnScrollChangeListener{override fun onScrollChange(v: NestedScrollView…

高中成绩可视化平台开发笔记

高中成绩可视化平台(1) 一、项目概述 本系统是一个基于 PyQt5 和 Matplotlib 的高中成绩数据可视化分析平台,旨在帮助教师快速了解学生成绩分布、班级对比、学科表现等关键指标。平台支持文科与理科的数据切换,并提供多个维度的图…

自动化按需导入组件库的工具rust版本完成开源了

背景 当我为每个Vue项目使用ui组件库的时候,都会使用按需导入的方式来使用ui组件库。但是每次按需导入,不可避免的就需要做以下三步。我们以element plus ui组件库为例。 1. 安装依赖 第一步,当然是需要安装依赖。命令如下: pnpm add unp…

Linux内核中TCP分段的核心机制:tcp_fragment函数解析

引言:TCP分段的必要性 在TCP/IP协议栈中,MSS(最大分段大小) 限制了单次传输的数据量。当应用层发送的数据超过当前路径的MSS时,内核必须执行分段操作。tcp_fragment函数正是Linux内核中处理TCP分段的核心机制,它巧妙地在协议合规性、内存安全和性能效率之间取得平衡。 一…

【赵渝强老师】OceanBase OBServer节点的SQL层

OceanBase OBServer节点的SQL层将用户的SQL请求转化成对一个或多个Tablet的数据访问。SQL层会按照以下顺序经过一系列组件来处理一个SQL: Parser -->Resolver-->Transformer-->Optimizer-->CodeGenerator-->Executor。视频讲解如下 【赵渝强老师】O…

从“高配”到“普惠”,黑芝麻智能携手Nullmax打造辅助驾驶主流量产方案

近日,黑芝麻智能携手Nullmax打造的辅助驾驶主流量产方案正式发布。该方案面向8-15万元级别主流车型,基于单颗黑芝麻智能武当C1236跨域计算芯片,集成Nullmax全栈自研的软件技术架构,结合领先的视觉感知算法,打造高性能辅…

信息安全认证体系全解析:从资质证明到行业准入的实践指南

Hello!大家好,小编是一名专注IT领域的资深探索家,大家发现了吗?现在刷招聘软件,国企安全岗必标 "CISP 优先",外企招聘悄悄写着 "CISSP 加分"—— 这些带字母的证书到底是啥&#xff1f…