OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

JavaScript中匿名函数和命名函数的性能差异


分享到
分类 JS学习   关键字 JavaScript   发布 kris  1409278463023
注意 转载须保留原文链接,译文链接,作者译者等信息。  
我们经常通过匿名函数(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测试。

社区评论 ( Beta版 )
OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. OurJS-免费开源的博客引擎,论坛系统,网站模板和轻量级的CMS
  2. 痛苦的Java程序员
  3. JavaScript构建(编绎)系统大比拼:Grunt vs. Gulp vs. NPM
  4. JavaScript中的继承,构造函数以及new关键字的作用
  5. 微软Azure云推出基于JSON的NoSQL数据库DocumentDB
  6. TJ Holowaychuk将Express维护权移交给StrongLoop
  7. 前置逗号是不好的JavaScript代码书写习惯吗?
  8. CSS的力量:用一个DIV画图
  9. 有可能将CSS应用到一个字符的一半吗?
  10. fibjs 比 nodejs 快五倍
  11. AirJD-简单好用的免费建站工具

 相关阅读 - JS学习
  1. JavaScript中怪异的地方
  2. 前置逗号是不好的JavaScript代码书写习惯吗?
  3. 在node.js响应流中设置多个Set-Cookie header属性
  4. JavaScript:世界上误解最深的语言
  5. 告别Node.js
  6. Node.js手册:require是如何工作的
  7. JavaScript最大堆栈的数量
  8. 7个步骤:让JavaScript变得更好
  9. 在JavaScript数组中找到最小元素的位置
  10. 在JavaScript中创建命名空间的几种写法

 关键字 - JavaScript
  1. JavaScript中NaN的秘密
  2. decodeURIComponent有个BUG,当浏览器请求地址含%+数字时,会解析错误
  3. JavaScript也有getter/setter方法:ES5 Object对象的5个不为人知的特性
  4. JavaScript中splice与slice的区别、数组的复制以及在指定位置添加删除元素
  5. JavaScrip字符串模板表达式中的反引号怎么打?
  6. Node.JS更改Windows注册表regedit的几种方法
  7. AngularJS在大型单页面应用中的性能优化(二)
  8. WebPack:更优秀的模块依赖管理工具,及require.js的缺陷
  9. Debian下设置Linux Shell脚本开机自动启动Node.JS进程
  10. Node.JS通过原型和类继承EventEmitter,实现收发事件的几种方法

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号