ES6箭头函数用法

本文详细介绍了JavaScript中的箭头函数,包括其字面量语法、简化形式、this指向问题以及不适用的场景。箭头函数可以简化函数定义,但不适用于构造函数、事件回调及需要arguments的情况。同时,由于箭头函数的this继承自外层作用域,这与常规函数不同,需要注意在使用时的上下文。
摘要由CSDN通过智能技术生成

前言:本部分主要介绍箭头函数概念,语法,使用场景和注意事项

一、预备知识

首先,需要了解什么是字面量(literal 美/ˈlɪtərəl/)。

中文维基百科: 字面量是指源程序中表示固定值的符号(token)

百度百科:在计算机科学中,字面量是用于表达源代码中一个固定值的表示法(notation)

个人的定义:字面量表示在源代码中的某种数据类型的固定值。

例如,

字符串(数据类型的)字面量"hello world"或者'hello world';
数字字面量 123;
数组字面量 [1, 2, 3];
对象字面量 {name: 'Alice', age: 18};

函数也有字面量 function(){} (匿名函数)

二、箭头函数

箭头函数是函数字面量的形式之一。

语法结构:

()=>{}
() 用于声明参数列表,{}表示函数体

1. 箭头函数的简化

(1)单个参数省略小括号

const print = (msg) => {console.log(msg)};
// 简化
const print = msg => {console.log(msg)};

无参数或者多参数不可以省略圆括号
在这里插入图片描述
(2) 函数体中只包含一条表达式语句,省略花括号和return

const add = (x, y) => {return x + y;}
// 化简
const add = (x, y) => x + y;

默认会返回表达式的值,如果该单行语句是函数调用语句且没有返回值,则返回undefiend。有返回值则将其返回

(3)返回对象

const add = (x, y)=>{value: x + y};
const res = add(1, 1);
console.log(res);

运行结果:在这里插入图片描述

{value: x + y} 是对象表达式,按道理说,单行表达式语句是可以直接返回的。但是在=>后面出现,花括号会被解析为函数体的组成部分,而不认为是对象表达式。value: x + y; 会被认为是函数体重的lable语句。(label语句,break后会跳转到label语句继续执行)。

这很容易解决,只需要让{value: x + y}解析为对象表达式即可。可以使用能改变运算符优先级的(),它其中的任何值都被认为是表达式。

自执行函数也是这样做的,(function(){})(); 直接写匿名函数会被认为是函数声明,因为没有函数名而报错,使用() 包含,就会被认为是表达式。

在这里插入图片描述

// 修改代码 
const add = (x, y)=> ({value: x + y});
const res = add(1, 1);
console.log(res);

在这里插入图片描述
当然,你不简写也是完全可以的

// 修改代码 
const add = (x, y)=> {return {value: x + y}; }

{value: x + y} 出现在返回语句中,同样会被认为是对象表达式。

三、箭头函数中的this指向问题

全局作用域中的this,在浏览器环境下,会执行全局对象this;

一般函数中的this指向调用对象;

而箭头函数中没有this(局部变量),它的this执行全局对象。

在这里插入图片描述

四、不适用箭头函数的场景

(1) 构造函数
构造函数中需要this,而箭头函数中没有,它的this指向全局对象,使用它作为构造函数,属性会被添加到全局对象
(2) 给事件绑定回调函数
(3) 需要使用arguments,箭头函数中没有arguments(局部变量)

五、为什要设计箭头函数

不希望创建类的对象,因为类只要静态方法,没有实例域。
满足该条件的类和方法可以使用箭头函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明月几时有666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值