匿名関数を介してコールバックを書くことがよくあります。
簡単に言えば、匿名とは名前のない関数を意味し、通常はすぐに実行されます。しかし、名前付き関数(名前の関数)でどのように機能しますか?
比較できます。 Shellコマンドを実行して多数の関数呼び出しを使用して、2つによって実行時間がどのように消費されるかを確認できるコンピューターを見つけることができます。
anonymous.js
コードコピーは次のとおりです。
var count = 10000000
、sum = 0
while(count-)(function(){sum ++})(
それを実行します
コードコピーは次のとおりです。
$ time node anonymous.js
REAL 0M1.456S
ユーザー0M0.015S
SYS 0M0.031S
名前付き関数を見てみましょう
named.js
コードコピーは次のとおりです。
var count = 10000000
、sum = 0
var cb = function(){
合計++
}
while(count-)cb()
それを実行します
コードコピーは次のとおりです。
$ time node named.js
REAL 0M0.575S
ユーザー0M0.000S
SYS 0M0.046S
名前付き関数ははるかに高速になりますが、なぜこれが起こっているのですか?実際、説明するのは難しくありません。匿名関数は毎回コールバックを再解釈する必要がありますが、指定された関数は一度解釈する必要があるため、パフォーマンスが向上します。しかし、このテストでは、この改善は非常に、非常に小さく、別の変数に非常に便利なコールバックを別々に書き込む必要はないことがわかりました。
名前付き関数を書く方法は2つあります。
関数式
コードコピーは次のとおりです。
var func = function(){
console.log( 'a')
}
関数宣言
コードコピーは次のとおりです。
function func(){
console.log( 'b')
}
実際、これら2つが一緒に使用されている場合、問題があるかもしれません。
コードコピーは次のとおりです。
var func = function(){
console.log( 'a')
}
function func(){
console.log( 'b')
}
//出力は次のとおりです
したがって、現在、関数式の形式は主に使用されていますが、関数宣言のパフォーマンスはどのように使用されますか?
named2.js
コードコピーは次のとおりです。
var count = 10000000
、sum = 0
関数cb(){
合計++
}
while(count-)cb()
それを実行して、2つを比較します
コードコピーは次のとおりです。
$ time node named.js
REAL 0M0.553S
ユーザー0M0.000S
SYS 0M0.015S
$ TIME NODE ANDAME2.js
REAL 0M0.529S
ユーザー0M0.000S
SYS 0M0.047S
関数宣言は少し速くなるようですが、非常に重要ではありません。私は個人的に機能宣言執筆方法をお勧めします。
PS:このデータは、Windows 7の下でGit-baseを使用してテストされています。