JS中的箭头函数用法是什么,对比普通函数有何不同
Admin 2022-06-22 群英技术资讯 305 次浏览
ES6 中新增了使用箭头=>
来定义函数表达式的方法。很多情况下,箭头函数和函数表达式创建的函数并无区别,只有写法上的不同。
本文第二块内容将介绍箭头函数和普通函数功能上的区别。
如下所示,定义一个函数,可以使用function
关键字,函数接收两个参数a
和b
,返回a
和b
的和。
function getSum(a, b) { return a + b; }
若使用箭头函数来定义这个函数,可以写成如下形式,省略function
关键字,用箭头=>
定义一个函数。
const getSum = (a, b) => { return a + b; };
若定义的箭头函数,函数体内只有return
语句,则可以省略大括号{}
和return
。
如下所示,定义的箭头函数,完整写法。
const getSum = (a, b) => { return a + b; };
此箭头函数的函数体内只有return
语句,那么,省略了大括号{}
和return
后的精简写法如下:
const getSum = (a, b) => a + b;
若定义的箭头函数,参数只有一个,则可以省略小括号。
如下所示,定义的箭头函数,只有一个参数,完整写法。
const func = (a) => { return a + 2; };
省略了参数旁边的小括号,以下代码等价于上面的代码。
const func = a => a + 2;
注意:若函数没有参数,或者多个参数的情况下,必须要使用括号。
大多数情况下,能使用普通函数的地方都可以用箭头函数代替,因为箭头函数更精简。
但在部分情况下,箭头函数与普通函数有着很大的却别。
如下代码,定义了一个对象obj
,对象中有个普通函数定义的方法getThis
,打印出此处的this
。调用obj.getThis()
,会打印出obj
对象。这说明方法内部的this
指向对象obj
。
const obj = { name: 'Jack', getThis() { console.log(this); }, }; obj.getThis(); // {name: 'Jack', getThis: ƒ}
同样定义一个对象obj
,但里面的方法用箭头函数定义,浏览器中调用obj.getThis()
却打印出Window
,这说明即使调用obj
对象身上的方法,方法内部的this
也不会指向obj
,而是指向定义obj
的上下文的this
。
const obj = { name: 'Jack', getThis: () => { console.log(this); }, }; obj.getThis(); // Window
如下代码,普通函数getName
打印this.name
,通过call
将函数中的this
绑定到obj
身上,调用getName
打印出obj
身上的属性name
。
const obj = { name: 'Jack', }; function getName() { console.log(this.name); } getName.call(obj); // Jack
若将函数改成箭头函数,那么call
将不起作用,无法将函数内部的this
绑定到obj
,打印出undefined
。
const obj = { name: 'Jack', }; const getName = () => { console.log(this.name); }; getName.call(obj); // undefined
箭头函数不可以作为构造函数使用,若将箭头函数作为构造函数,将报错,如下代码所示。
const Person = () => { this.name = 'Jack'; }; const usr = new Person(); // Person is not a constructor
在普通函数内部,可以使用arguments
来获取传入的参数,是一个类数组对象:
function func() { console.log(arguments); } func(1, 2, 3); // [Arguments] { '0': 1, '1': 2, '2': 3 }
而箭头函数就不可以使用arguments
对象,获取不到输入的参数。
在浏览器中,若在箭头函数使用arguments
对象,将报错。
const func = () => { // 浏览器环境 console.log(arguments); // arguments is not defined }; func(1, 2, 3);
但是箭头函数可以在参数内,以...args
的方式,获取到输入的参数,得到的args
是一个数组。
const func = (...args) => { console.log(args); // [ 1, 2, 3 ] }; func(1, 2, 3);
普通函数定义的构造函数内部,支持使用new.target
,返回构造实例的构造函数。
function Person() { this.name = 'Jack'; console.log(new.target); } // 指向构造函数 new Person(); // [Function: Person]
而在箭头函数中,不支持使用new.target
。在浏览器环境中,箭头函数使用new.target
将报错:new.target expression is not allowed here
。
const Person=() =>{ this.name = 'Jack'; console.log(new.target); } // 浏览器环境 new Person(); // new.target expression is not allowed here
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
删除方法:1、用removeClass()或toggleClass()移除指定CSS类,语法“removeClass("类名")”或“toggleClass("类名")”;2、用removeAttr()去除id、class或style属性。
在实际的应用中用搜索框查询时,经常会需要进行模糊查询操作,因此这篇文章就主要给大家分享怎样用Node实现有模糊查询功能的搜索框,下文有实现步骤和代码,感兴趣的朋友就接着往下看吧。
在React中,你可以创建不同的组件来封装各种你需要的行为。然后还可以根据应用的状态变化只渲染其中的一部分。React 中的条件渲染和JavaScript中的一致,使用JavaScript操作符if或条件运算符来创建表示当前状态的元素,然后让React根据它们来更新UI
在JavaScript中我们经常会因为工作原因创建对象和属性,但是也有许多人会好奇javaScript如何创建对象和属性,那么下面我们就一起去看看吧。
本篇文章给大家带来了关于javascript的相关知识,其中主要整理了编译原理的相关问题,Javascript是一种由Netscape(网景)的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,下面一起来看一下,希望对大家有帮助。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008