讲师中心 微信公众号
AI工具推荐 视频效率加速

箭头函数 => 常规函数有什么问题吗?

小瑶吖_4905

小瑶吖_4905

发布时间:2024-11-12 10:45:09

|

791人浏览过

|

来源于dev.to

转载

箭头函数 => 常规函数有什么问题吗? 常规函数有什么问题吗?" />

如果您扩展了 javascript 知识并想知道为什么他们会在 ecmascript 2015 (es6) 中添加箭头函数,那么您并不孤单。当我加深对这门语言及其复杂性和怪癖的了解时,我发现自己也在想同样的事情。在这篇文章中,我将列出它的差异、优点、添加它的原因以及何时应该使用它。

我们来谈谈差异

在引入箭头函数之前,必须以传统格式声明函数,如下所示:

function add(x, y) {
  return x + y;
}

或声明为表达式:

const addfunction = function add(x, y) {
  return x + y;
}

引入箭头函数,可以写成:

const addfunction = (x,y) => x + y

简洁的语法

从上面的例子中,我们可以很容易地看出,通过使用箭头函数并利用其隐式返回特性,可以将函数快速重构为一行。生成的代码更简洁、更清晰、更易于阅读,从而使开发更顺畅、调试更快。

吊装

默认情况下,javascript 运行时会在创建执行上下文时将所有函数和变量声明提升到其作用域的顶部。例如,在全局范围内,这可确保声明的所有函数和变量可供以后调用的所有函数使用。但是,箭头函数永远不会被提升,从而可以更好地控制函数执行位置及其有权访问的变量的精确位置。

语境

每次执行 javascript 函数时,它都会创建一个执行上下文,其中包含有关该函数运行的环境的信息,包括 this 的值。虽然传统函数在其自己的上下文中执行,但箭头函数将始终继承调用它的函数的上下文。
使用以下代码:

class person {
    constructor(){
        this.name = "george";
        this.greetings = ["good morning,","hello!","howdy!"];
    }

    printgreetings(){
        this.greetings.foreach(function print(greet){
            console.log(`${greet} ${this.name}`);
        });
    }
}

let person = new person();
person.printgreetings();

我们会得到一个错误:cannot read property 'foreach' of undefined,这是因为虽然 printgreetings 函数位于 person 类的上下文中并继承了它的上下文,但 foreach 函数(即使它的内置 javascript 函数) 在自己的上下文中运行,不包含 this.name 属性,因此会导致查找错误。

然而,箭头函数永远不会在自己的上下文中运行,并且通过使用箭头函数重写上面的函数...

printgreetings(){
    this.greetings.foreach((greet) => {
        console.log(`${greet} ${this.name}`);
    });
}

结果将如预期

Good Morning, George
Hello! George
Howdy! George

概括

总结箭头函数的好处;它们允许更短、更简洁的代码;提供功能块代码的隐式返回;不会提升到执行上下文的顶部并保持其在代码中的确切位置;最后,它们继承调用它的函数的上下文,而不执行它自己的上下文,从而允许更可预测地使用此关键字。

希望这篇文章可以帮助您更好地理解传统函数与箭头函数的区别和优点,并让您在 javascript 之旅中更进一步!

进一步阅读:
dmitri pavlutin 博客 - 箭头函数与常规函数之间的差异
mdn 参考文档 - 箭头函数

热门AI工具

更多
讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

相关专题

更多
es6新特性
es6新特性

es6新特性有:1、块级作用域变量;2、箭头函数;3、模板字符串;4、解构赋值;5、默认参数;6、 扩展运算符;7、 类和继承;8、Promise。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

265

2023.07.17

es6新特性有哪些
es6新特性有哪些

es6的新特性有:1、块级作用域;2、箭头函数;3、解构赋值;4、默认参数;5、扩展运算符;6、模板字符串;7、类和模块;8、迭代器和生成器;9、Promise对象;10、模块化导入和导出等等。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

386

2023.08.04

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

355

2025.12.24

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

738

2025.12.04

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

11685

2023.07.31

网页undefined是什么意思
网页undefined是什么意思

网页undefined是指页面出现了未知错误的意思,提示undefined一般是在开发网站的时候定义不正确或是转换不正确,或是找不到定义才会提示undefined未定义这个错误。想了解更多的相关内容,可以阅读本专题下面的文章。

5507

2024.08.14

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

2516

2025.12.25

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

40

2026.10.08

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

140

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Anaconda与Miniconda选择说明
Anaconda与Miniconda选择说明

共0课时 | 0人学习

CentOS 官方文档
CentOS 官方文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn