JavaScript中匿名、命名函數(shù)的性能測(cè)試
我們經(jīng)常通過匿名函數(shù)(Anonymous function)來寫回調(diào)。
簡(jiǎn)單來講匿名即沒有名字的函數(shù),一般都立即執(zhí)行。但是它與命名函數(shù)(有名字的函數(shù))的性能如何呢?
我們可以比較一下,我們隨便找一臺(tái)可以執(zhí)行Shell命令的計(jì)算機(jī)來使用大量函數(shù)調(diào)用看一看二者執(zhí)行消耗時(shí)間:
anonymous.js
var count = 100000000
, sum = 0
while (count--) (function() { sum++ })()
執(zhí)行一下
$ time node anonymous.js
real 0m1.456s
user 0m0.015s
sys 0m0.031s
再來看看命名函數(shù)
named.js
var count = 100000000
, sum = 0
var cb = function() {
sum++
}
while (count--) cb()
執(zhí)行一下
$ time node named.js
real 0m0.575s
user 0m0.000s
sys 0m0.046s
命名函數(shù)會(huì)快很多,為什么會(huì)這樣呢?其實(shí)不難解釋,匿名函數(shù)每次都需要重新解釋回調(diào),但是命名函數(shù)只需要解釋一次,因此性能會(huì)有提升,但是測(cè)試發(fā)現(xiàn)這種提升是非常非常微小的,完全不必將非常順手的一個(gè)回調(diào)單獨(dú)寫成另外一個(gè)變量。
另外命名函數(shù)還有兩種寫法:
函數(shù)表達(dá)式
var func = function() {
console.log('a')
}
函數(shù)聲明
function func() {
console.log('b')
}
其實(shí)這兩個(gè)一起用的話可能會(huì)有問題,如
var func = function() {
console.log('a')
}
function func() {
console.log('b')
}
//輸出為: a
因此目前多使用函數(shù)表達(dá)式的形式,但函數(shù)聲明的性能如何呢?
named2.js
var count = 100000000
, sum = 0
function cb() {
sum++
}
while (count--) cb()
執(zhí)行一下,并比較二者
$ 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
似乎函數(shù)聲明會(huì)稍微快一點(diǎn)點(diǎn),不過快得也非常非常不明顯,個(gè)人還是建議函數(shù)聲明式寫法。
PS: 此數(shù)據(jù)均在Windows7下使用git-base測(cè)試。
相關(guān)文章
window.close(); 關(guān)閉瀏覽器窗口js代碼的總結(jié)介紹
下面小編就為大家?guī)硪黄獁indow.close(); 關(guān)閉瀏覽器窗口js代碼的總結(jié)介紹。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-07-07JavaScript indexOf方法入門實(shí)例(計(jì)算指定字符在字符串中首次出現(xiàn)的位置)
這篇文章主要介紹了JavaScript indexOf方法入門實(shí)例,indexOf方法用于計(jì)算指定字符在字符串中首次出現(xiàn)的位置,需要的朋友可以參考下2014-10-10實(shí)例分析javascript中的call()和apply()方法
因項(xiàng)目需求去研究了下javascript中的call和apply方法,去百度看了幾篇介紹JS中call和apply的文章,總覺得不是很好懂,這里寫下我自己的理解,供網(wǎng)友們參考。2014-11-11javascript學(xué)習(xí)筆記(九)javascript中的原型(prototype)及原型鏈的繼承方式
在javascript學(xué)習(xí)筆記(八)中,我們主要學(xué)習(xí)了在使用javascript面向?qū)ο缶幊虝r(shí),如何創(chuàng)建對(duì)象及添加對(duì)象的屬性和方法。2011-04-04簡(jiǎn)述JavaScript中正則表達(dá)式的使用方法
這篇文章主要介紹了JavaScript中正則表達(dá)式的使用方法,正則表達(dá)式是JS進(jìn)階學(xué)習(xí)中的重要知識(shí),本文簡(jiǎn)述了JS對(duì)正則表達(dá)式的支持情況,需要的朋友可以參考下2015-06-06JavaScript 學(xué)習(xí)筆記(九)call和apply方法
兩者實(shí)現(xiàn)的功能是完全一樣的,只是參數(shù)傳遞方式不一樣,call是將各個(gè)參數(shù)以逗號(hào)(,)隔開,而apply是將所有參數(shù)組成一個(gè)數(shù)組進(jìn)行傳遞。2010-01-01一篇文章告訴你JavaScript的作用域和函數(shù)該這樣理解
這篇文章主要為大家詳細(xì)介紹了JavaScript的作用域和函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-02-02