JavaScript中匿名、命名函数的性能测试

 更新时间:2014年09月04日 13:08:14   投稿:junjie  
这篇文章主要介绍了JavaScript中匿名、命名函数的性能测试,简单来讲匿名即没有名字的函数,它和命名函数相比性能如何呢,本文即是对它们性能的测试,需要的朋友可以参考下

我们经常通过匿名函数(Anonymous function)来写回调。

简单来讲匿名即没有名字的函数,一般都立即执行。但是它与命名函数(有名字的函数)的性能如何呢?

我们可以比较一下,我们随便找一台可以执行Shell命令的计算机来使用大量函数调用看一看二者执行消耗时间:

anonymous.js

复制代码 代码如下:

var count = 100000000
  , sum   = 0
while (count--) (function() { sum++ })()

执行一下
复制代码 代码如下:

$ time node anonymous.js
real    0m1.456s
user    0m0.015s
sys     0m0.031s

再来看看命名函数

named.js

复制代码 代码如下:

var count = 100000000
  , sum   = 0

var cb = function() {
  sum++
}

while (count--) cb()


执行一下
复制代码 代码如下:

$ time node named.js
real    0m0.575s
user    0m0.000s
sys     0m0.046s

命名函数会快很多,为什么会这样呢?其实不难解释,匿名函数每次都需要重新解释回调,但是命名函数只需要解释一次,因此性能会有提升,但是测试发现这种提升是非常非常微小的,完全不必将非常顺手的一个回调单独写成另外一个变量。

另外命名函数还有两种写法:

函数表达式

复制代码 代码如下:

var func = function() {
  console.log('a')
}

函数声明
复制代码 代码如下:

function func() {
  console.log('b')
}

其实这两个一起用的话可能会有问题,如
复制代码 代码如下:

var func = function() {
  console.log('a')
}
function func() {
  console.log('b')
}
//输出为: a

因此目前多使用函数表达式的形式,但函数声明的性能如何呢?

named2.js

复制代码 代码如下:

var count = 100000000
  , sum   = 0

function cb() {
  sum++
}

while (count--) cb()


执行一下,并比较二者
复制代码 代码如下:

$ time node named.js
real    0m0.553s
user    0m0.000s
sys     0m0.015s

$ time node named2.js
real    0m0.529s
user    0m0.000s
sys     0m0.047s


似乎函数声明会稍微快一点点,不过快得也非常非常不明显,个人还是建议函数声明式写法。

PS: 此数据均在Windows7下使用git-base测试。

相关文章

  • 全选复选框JavaScript编写小结(附代码)

    全选复选框JavaScript编写小结(附代码)

    这篇文章主要介绍了全选”复选框JavaScript编写,分别附上html和js代码以供大家更深刻了解,具体操作步骤大家可查看下文的详细讲解,感兴趣的小伙伴们可以参考一下。
    2017-08-08
  • jquery简单体验

    jquery简单体验

    jquery简单体验...
    2007-01-01
  • 在JavaScript中使用开平方根的sqrt()方法

    在JavaScript中使用开平方根的sqrt()方法

    这篇文章主要介绍了在JavaScript中使用开平方根的sqrt()方法,是JS入门学习中的基础知识,需要的朋友可以参考下
    2015-06-06
  • JavaScript数据结构与算法之集合(Set)

    JavaScript数据结构与算法之集合(Set)

    JavaScript集合(set) 可以使用集合对象 Map、Set 和WeakMap 存储值和对象。通过这些对象,可以使用键或值而非索引来轻松添加和检索成员。
    2016-01-01
  • 关于JavaScript中string 的replace

    关于JavaScript中string 的replace

    在使用JavaScript对字符串进行处理的时候我们经常会用到replace方法,很简单的一个方法,以前一直不以为意,直到今天看JavaScript语言精粹的时候读到了一个有趣的小例子的时候,并不是十分理解,了解了一下replace的用法才明白,原来replace不像想象中的那么简单
    2013-04-04
  • javaScript知识点总结(必看篇)

    javaScript知识点总结(必看篇)

    下面小编就为大家带来一篇javaScript知识点总结(必看篇)。小编觉得挺不错的,现在就分享 给大家,也给的大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • 一文带你走进js数据类型与数据结构的世界

    一文带你走进js数据类型与数据结构的世界

    这篇文章主要介绍了js-数据类型与数据结构,文章具有一定的参考学习价值,需要的朋友可以学习一下这篇文章中的内容
    2021-08-08
  • JavaScript自定义函数用法详解

    JavaScript自定义函数用法详解

    本文详细讲解了JavaScript自定义函数的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • 让ie运行js时提示允许阻止内容运行的解决方法

    让ie运行js时提示允许阻止内容运行的解决方法

    这个问题一般是因为网页中使用了一些js代码,而ie的默认安全级别过高导致运行js时需要经过准许才可以。下面是IE的设置方法。
    2010-10-10
  • 深入理解JavaScript中的对象复制(Object Clone)

    深入理解JavaScript中的对象复制(Object Clone)

    下面小编就为大家带来一篇深入理解JavaScript中的对象复制(Object Clone)。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05

最新评论