广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >为什么不使用JS匿名函数
  • 848
分享到

为什么不使用JS匿名函数

2024-04-02 19:04:59 848人浏览 泡泡鱼
摘要

这篇文章主要讲解了“为什么不使用js匿名函数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么不使用JS匿名函数”吧!如果你不知道匿名函数是什么,这里有一

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

如果你不知道匿名函数是什么,这里有一个引语:

匿名函数是一种在运行时动态声明的函数。它们之所以被称为匿名函数是因为不同于普通函数,它们并没有函数名。 — Helen Emerson,  Helephant.com

匿名函数形式如下:

function () { ... code ... } OR (args) => { ... code .. }

今天我尝试让大家理解只有在绝对需要的情况下才使用匿名函数的想法。匿名函数不应该是***,而且你自己也应该知道为什么使用它。当理解这种想法之后,你的代码会变得更简洁,更容易维护,并且更容易跟踪bug。

先从避免使用匿名函数的三个理由开始:

无论你多么擅长写代码,出现错误也是不可避免的。有时候,这些错误很容易被查出,有时候并不容易。

如果你知道这些错误来自哪里,那么错误会很容易被查出来。为了容易查出错误,我们使用这个被叫做堆栈轨迹的工具。如果你不了解堆栈轨迹,Goole给出了很棒的介绍。

假设现在有一个非常简单的项目

function start () {  (function middle () {    (function end () {      console.lg('test');     })()   })() }

上面代码里面有一个非常愚蠢的错误,拼写错误(console.log)。在小项目里面,这个拼写错误不是什么大问题。如果这是一个有非常多模块非常大的项目一小段,问题就大了。假设这个愚蠢的错误不是你犯的,那么新来的初级工程师将会在他休假之前把这个错误提交到代码库!

现在,我们必须追查。 使用我们精心命名的函数,我们得到如下的堆栈跟踪:

谢谢你命名你的函数,初级开发者们! 现在我们可以轻松地追踪到这个bug。

但是..一旦我们解决了这个问题,就会发现还有另一个bug。  这次是一位更资深的开发人员介绍的。这个人知道lambdas(匿名函数),并在代码中大量使用它们。 结果他们偶然发现了一个bug,我们的工作就是追踪它。

下面是代码:

(function () {  (function () {    (function () {      console.lg('test');     })();   })(); })();

吃不吃惊,这名开发者也忘记了如何拼写console.log了!这也太巧合了吧!令人感到遗憾的是,他们都没有命名他们的函数。

那么控制台会输出什么呢?

好吧,我们至少还有行号,对吧?在这个例子中,看起来我们有大约7行代码。如果我们处理一大段代码会如何呢?比如一万行代码?行号的跨度如此之大该怎么办呢?如果代码被折叠后有没有一个代码地图文件,那么对行号的渲染是不是根本就是没有什么用了呢?

我想对这些问题的回答相当简单,答案就是:想这些会让你一整天都会过的相当糟心。

可读性

咦,我听说你还不信。你仍旧对你的匿名函数恋恋不舍,并且还从未发生过bug。我的错,你的代码是完整的。但是让我们看看这个!

看看下面两段代码:

function initiate (arguments) {   return new Promise((resolve, reject) => {     try {       if (arguments) {          return resolve(true);       }       return resolve(false);     } catch (e) {       reject(e);     }   }); }  initiate(true)   .then(res => {         if (res) {           doSomethingElse();         } else {           doSomething();         }   ).catch(e => {             logError(e.message);             restartApp();           }   );

这是一个非常不正常的例子,但是我相信你已经明白我要说什么了。我们反悔了一个promise方法,我们用这个promise对象/方法处理不同的响应。

你也许会认为几段代码读起来并不难,但我认为它们可以变得更好!

如果我们去掉所有的匿名函数会怎样呢?

function initiate (arguments) {   return new Promise(checkForArguments); }  function checkForArguments (resolve, reject) {   try {     if (arguments) {      return resolve(true);        }     return resolve(false);   } catch (e) {     reject(e);   } }  function evaluateRes (res) {   if (res) {     doSomethingElse();   } else {     doSomething();   } }  function handleError (e) {   logError(e.message);   restartApp(); }  initiate(true)   .then(evaluateRes)   .catch(handleError);

好,先讲清楚:这部分代码更长,但我不认为只是增加了可读性!我们精心命名的函数与匿名函数不一样,只要我们一看到它们的名字就知道它们的功能是什么。这避免了在评估代码时出现心理障碍。

这也有助于分清楚其中的关系。与创建一个方法、将其传递、然后运行逻辑不同,在第二个例子中的参数被给到了then,catch只是指向了发生所有事情的函数。

关于更具有可读性,我没有什么再能说服你的了。但是也许你还没被说服的话,我可以试一下***的论据。

可重用性

你注意到上一个例子了吗?上个例子中的函数的使用范围从参数和初始化函数,变为让所有函数都能使用。

当你使用匿名函数时这些函数很难在你的应用程序内重复使用。

可重用性将不复存在,最终你会一遍又一遍地写重复的代码。正如我们所见的,代码写的越少引入的Bug就越少,用户必须加载的内容就越少。所有人都会因此获益!

相反的,命名函数可以全局使用,而不需要像变量一样到处传递。你的代码的可重用性会更好,

匿名函数有可取的地方吗?

有。虽然很不愿意承认,但有时候使用匿名函数是***的选择。

const stuff = [    { hide: true, name: 'justin' },    { hide: false, name: 'lauren' },   { hide: false, name: 'max' }, ]; const filteredStuff = stuff.filter(s => !s.hide);

上边代码中的匿名函数s =>  !s.hide非常简单,即使不能在别的地方使用也不会对别人有任何影响,而且也可以在stuff.filter中显示出堆栈调用。如果想要重用这段代码,***重用整段代码:

function filterByHide (array) {   return array.filter(item => !item.hide); }

有时你想把你所有的代码封装到匿名函数中,以保证全局范围不会被污染。

(() => {  ... your code here ... })();

在栈空间中拥有一个***的匿名函数真得不会有什么错误。没有代码重用是痛苦的,因为完整的目的是保持方法内含。

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

--结束END--

本文标题: 为什么不使用JS匿名函数

本文链接: https://www.lsjlt.com/news/85950.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 为什么不使用JS匿名函数
    这篇文章主要讲解了“为什么不使用JS匿名函数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么不使用JS匿名函数”吧!如果你不知道匿名函数是什么,这里有一...
    99+
    2022-10-19
  • C#匿名函数和匿名方法的使用
    目录匿名函数的语法 C# 匿名函数使用场景在 C# 中,可以将匿名函数简单的理解为没有名称只有函数主体的函数。匿名函数提供了一种将代码块作为委托参数传递的技术,它是一个&l...
    99+
    2023-05-14
    C#匿名函数和匿名方法 C# 匿名函数
  • golang匿名函数是什么
    Golang中的匿名函数是一种没有明确名称的函数。它可以在需要函数的地方直接定义和使用,而不需要事先声明一个函数。 匿名函数可以作为...
    99+
    2023-10-22
    golang
  • C#匿名函数和匿名方法如何使用
    这篇文章主要讲解了“C#匿名函数和匿名方法如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#匿名函数和匿名方法如何使用”吧!在 C# 中,可以将匿名函数简单的理解为没有名称只有函数主...
    99+
    2023-07-05
  • js匿名函数使用&传参的示例分析
    这篇文章将为大家详细讲解有关js匿名函数使用&传参的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如下所示:function () {...
    99+
    2022-10-19
  • python中什么是匿名函数
    python中什么是匿名函数?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端开...
    99+
    2023-06-14
  • python中匿名函数使用什么保留字
    python中的匿名函数一般是使用lambda保留字,python中的保留字有以下几种:lambda:匿名函数;raise:触发异常后,后面的代码不会再执行;del:删除变量;in:迭代器;try,except:尝试一个可能抛出异常的程序块...
    99+
    2022-10-14
  • matlab匿名函数怎么用
    这篇文章主要介绍“matlab匿名函数怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“matlab匿名函数怎么用”文章能帮助大家解决问题。匿名函数  在Matlab7.0以后的版本...
    99+
    2023-06-19
  • Python匿名函数的用法是什么
    Python中的匿名函数也称为lambda函数,它是一种没有名称的函数。匿名函数通常用于需要一个简单的函数,但不希望为其命名的情况下...
    99+
    2023-10-24
    Python
  • GO语言不固定参数函数与匿名函数的使用
    目录不固定参数函数匿名函数 不固定参数函数 在go语言中,允许对函数设置不固定参数。不过需要注意的是,虽然不限制参数数量,但限制了参数的数据类型。 从原理分析,不固定参数利...
    99+
    2023-03-19
    GO语言不固定参数函数 GO语言 匿名函数
  • Kotlin匿名函数使用介绍
    目录1.函数的声明2.函数参数3.Unit函数4.匿名函数5.匿名函数的参数6.lambda表达式7.定义参数8.匿名函数9.函数的引用10.函数类型作为返回类型1.函数的声明 ko...
    99+
    2022-11-13
  • Golang如何使用匿名函数
    这篇文章将为大家详细讲解有关Golang如何使用匿名函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。匿名函数的两种使用方式一、在定义匿名函数的时候就可以直接使用(这种方式只使用一次)package&nb...
    99+
    2023-06-08
  • Python使用什么关键字声明匿名函数
    在Python中一般使用lambda对匿名函数进行声明,具体方法如下:lambda语法:lambda x:x*x #lambda关键字表示匿名函数,冒号前边x表示传递的参数,后边是返回的结果。lambda使用方法:li = [1,2,3]n...
    99+
    2022-10-23
  • PHP中匿名函数的作用是什么
    这期内容当中小编将会给大家带来有关PHP中匿名函数的作用是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。◆字符串的函数名◆使用create_function的返回51CTO推荐专题:PHP开发基础入门...
    99+
    2023-06-17
  • PHP中匿名函数怎么用
    这篇文章主要介绍PHP中匿名函数怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! PHP中的匿名函数(Anonymous functions), 也叫闭包函数(closures), 允许指定一个没有名称的函数。最...
    99+
    2023-06-14
  •  Python匿名函数lambda怎么用
    今天小编给大家分享一下 Python匿名函数lambda怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.前...
    99+
    2023-06-29
  • 在PHP中怎么为匿名函数指定this
    这篇文章将为大家详细讲解有关在PHP中怎么为匿名函数指定this,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。关于闭包匿名函数,在JS中有个很典型的问题就是要给它绑定一个 this 作用域。其实这个问题在...
    99+
    2023-06-14
  • GO语言不固定参数函数与匿名函数如何使用
    这篇文章主要介绍“GO语言不固定参数函数与匿名函数如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“GO语言不固定参数函数与匿名函数如何使用”文章能帮助大家解决问题。不固定参数函数在go语言中,...
    99+
    2023-07-05
  • JavaScript中如何使用匿名函数
    这篇文章将为大家详细讲解有关JavaScript中如何使用匿名函数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。循环结构中的JavaScript匿名函数先看...
    99+
    2022-10-19
  • python如何使用匿名函数lambda
    这篇文章主要介绍python如何使用匿名函数lambda,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!匿名函数 lambda所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。lambda 只是一个表达式...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作