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

简介: 箭头函数和普通函数的区别

箭头函数和普通函数在JavaScript中有一些重要的区别。下面我们将详细讨论这些区别,并提供代码示例。

1、语法差异:箭头函数的语法更简洁。它们不需要使用function关键字,也不需要指定参数列表的圆括号,如果函数体只有一条语句,甚至不需要大括号。

普通函数:

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

箭头函数:

const add = (a, b) => a + b;

2、this关键字的绑定:普通函数中的this值是在函数被调用时决定的,而箭头函数不会创建自己的this上下文,它会捕获其所在上下文的this值。

function Person() {
this.age = 21;
this.showAge = function() {
console.log(this.age);
}
this.showAgeInArrow = () => {
console.log(this.age);
}
}
 
const person = new Person();
const { showAge, showAgeInArrow } = person;
 
showAge(); // 输出 21
showAgeInArrow(); // 输出 21

在上述代码中,尽管showAgeshowAgeInArrow都是在全局作用域中被调用的,但是showAgeInArrow仍然能够正确地访问person对象的age属性,因为它是在Person构造函数的作用域中定义的,所以它捕获了那个作用域的this值。

3、不能用作构造函数:箭头函数不能用作构造函数,也就是说,它们不能通过new关键字来调用。

const MyArrowFunc = () => {};
 
const instance = new MyArrowFunc(); // TypeError: MyArrowFunc is not a constructor

4、没有prototype属性:箭头函数没有prototype属性。

const MyArrowFunc = () => {};
 
console.log(MyArrowFunc.prototype); // undefined

5、没有arguments对象:箭头函数没有自己的arguments对象。如果需要访问arguments对象,它必须是从包围的函数中捕获的。

function regularFunc() {
console.log(arguments);
}
 
const arrowFunc = () => {
console.log(arguments); // ReferenceError: arguments is not defined
}
 
regularFunc(1, 2, 3); // 输出 [1, 2, 3]
arrowFunc(1, 2, 3); // 报错

6、不能使用yield关键字:箭头函数不能使用yield关键字,因此不能用作生成器函数。

const MyArrowGenerator = () => {
yield 1; // SyntaxError: Generator function must be defined with function*
};

这些是箭头函数和普通函数之间的一些主要区别。在编写代码时,选择使用哪种类型的函数通常取决于你的具体需求和你希望如何处理this上下文、错误处理、代码可读性等问题。

相关文章
|
JavaScript Shell Android开发
安装使用Frida在Android上进行hook
我们对Android应用进行hook最常用的就是Xposed,它相对来说更加完善,而且有强大的社区和丰富的插件。而Frida则于Xposed不同,它是一款轻量级的Hook框架,可用于多平台,相同的是它依然需要root环境。本文就以Android为例来详细说说如何安装并使用它。
782 0
|
安全 算法 网络协议
一文带你搞懂HTTP和HTTPS
一文带你搞懂HTTP和HTTPS
488 0
|
缓存 网络协议 前端开发
【前端面试知识点】- 1. http&https
http: 是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从 WWW 服务器传输超文本到本地浏览器的超文本传输协议。
【前端面试知识点】- 1. http&https
|
XML JavaScript 数据格式
uni-app 根据用户不同身份显示不同的tabBar
uni-app 根据用户不同身份显示不同的tabBar
1191 62
|
JavaScript
Vue2文字提示(Tooltip)
这篇文章介绍了如何在Vue 3框架中创建一个文字提示组件(Tooltip),允许自定义提示框的最大宽度、展示文本和提示文本,支持鼠标悬停显示和隐藏效果。
613 0
Vue2文字提示(Tooltip)
|
JavaScript 前端开发 网络架构
箭头函数和普通函数的区别
箭头函数和普通函数的区别
236 8
|
存储 开发框架 自然语言处理
【Uniapp 专栏】Uniapp 的多语言支持功能详解
【5月更文挑战第14天】Uniapp是一款跨平台开发框架,提供强大多语言支持,助力开发者轻松构建支持多种语言的应用,提升用户体验和市场拓展。其特点包括灵活的语言管理、跨平台一致性。通过语言文件存储内容,切换机制让用户自由切换。注重翻译准确性和文化适应性,集成到页面和组件中,同时关注性能优化。面对翻译不一致和更新及时性等问题,Uniapp将持续发展和完善,为全球化应用开发提供强有力支持。
833 3
【Uniapp 专栏】Uniapp 的多语言支持功能详解
|
前端开发 JavaScript Java
一文带你了解和使用js中的Promise
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,正向全栈进发。如果我的文章对你有帮助,请关注我,将持续更新更多优质内容!🎉🎉🎉
708 0
一文带你了解和使用js中的Promise
|
前端开发 JavaScript 开发者
利用代码分割优化前端性能:高级技巧与实践
【10月更文挑战第2天】在现代Web开发中,代码分割是优化前端性能的关键技术,可显著减少页面加载时间。本文详细探讨了代码分割的基本原理及其实现方法,包括自动与手动分割、预加载与预取、动态导入及按需加载CSS等高级技巧,旨在帮助开发者提升Web应用性能,改善用户体验。
|
存储 自然语言处理 JavaScript
深入理解JavaScript的闭包(Closures)
深入理解JavaScript的闭包(Closures)
196 0