JavaScript中的箭头函数是什么

发布时间:2021-09-18 16:47:16 作者:chen
来源:亿速云 阅读:156

这篇文章主要讲解了“JavaScript中的箭头函数是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中的箭头函数是什么”吧!

一、箭头函数没有 “this”

正如我们在 对象方法,"this" 一章中所学到的,箭头函数没有 this。如果访问 this,则会从外部获取。

例如,我们可以使用它在对象方法内部进行迭代:

let group = {   title: "Our Group",   students: ["John", "Pete", "Alice"],    showList() {     this.students.forEach(       student => alert(this.title + ': ' + student)     );   } };  group.showList();

这里 forEach 中使用了箭头函数,所以其中的 this.title 其实和外部方法 showList  的完全一样。那就是:group.title。

如果我们使用正常的函数,则会出现错误:

let group = {   title: "Our Group",   students: ["John", "Pete", "Alice"],    showList() {     this.students.forEach(function(student) {       // Error: Cannot read property 'title' of undefined       alert(this.title + ': ' + student)     });   } };  group.showList();

报错是因为 forEach 运行它里面的这个函数,但是这个函数的 this 为默认值 this=undefined,因此就出现了尝试访问  undefined.title 的情况。

但箭头函数就没事,因为它们没有 this。

不能对箭头函数进行 new 操作

不具有 this 自然也就意味着另一个限制:箭头函数不能用作构造器(constructor)。不能用 new 调用它们。

箭头函数 VS bind

箭头函数 => 和使用 .bind(this) 调用的常规函数之间有细微的差别:

二、箭头函数没有 “arguments”

箭头函数也没有 arguments 变量。

当我们需要使用当前的 this 和 arguments 转发一个调用时,这对装饰器(decorators)来说非常有用。

例如,defer(f, ms) 获得了一个函数,并返回一个包装器,该包装器将调用延迟 ms 毫秒:

function defer(f, ms) {   return function() {     setTimeout(() => f.apply(this, arguments), ms)   }; }  function sayHi(who) {   alert('Hello, ' + who); }  let sayHiDeferred = defer(sayHi, 2000); sayHiDeferred("John"); // 2 秒后显示:Hello, John

不用箭头函数的话,可以这么写:

function defer(f, ms) {   return function(...args) {     let ctx = this;     setTimeout(function() {       return f.apply(ctx, args);     }, ms);   }; }

在这里,我们必须创建额外的变量 args 和 ctx,以便 setTimeout 内部的函数可以获取它们。

三、总结

箭头函数:

这是因为,箭头函数是针对那些没有自己的“上下文”,但在当前上下文中起作用的短代码的。并且箭头函数确实在这种使用场景中大放异彩。

感谢各位的阅读,以上就是“JavaScript中的箭头函数是什么”的内容了,经过本文的学习后,相信大家对JavaScript中的箭头函数是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. JavaScript的箭头函数
  2. javascript普通函数和箭头函数的区别

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

javascript

上一篇:web开发中的十种常见安全漏洞是怎样的

下一篇:Linux Centos7远程复制解析域名文件配置

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》