Kami sering menulis panggilan balik melalui fungsi tanpa nama.
Ringkasnya, anonymous bermaksud fungsi tanpa nama, yang biasanya dilaksanakan serta-merta. Tetapi bagaimanakah prestasinya berbanding dengan fungsi yang dinamakan (fungsi dengan nama)?
Kami boleh membandingkan komputer yang boleh melaksanakan perintah Shell dan menggunakan sejumlah besar panggilan fungsi untuk melihat masa pelaksanaan kedua-duanya:
tanpa nama.js
kiraan var = 100000000
, jumlah = 0
manakala (kira--) (fungsi() { jumlah })()
Laksanakannya
$ nod masa tanpa nama.js
0m1.456s sebenar
pengguna 0m0.015s
sys 0m0.031s
Mari kita lihat fungsi yang dinamakan
bernama.js
kiraan var = 100000000
, jumlah = 0
var cb = function() {
jumlah
}
sementara (kira--) cb()
Laksanakannya
$ nod masa bernama.js
0m0.575s sebenar
pengguna 0m0.000s
sys 0m0.046s
Fungsi yang dinamakan adalah lebih pantas, mengapa ini? Sebenarnya, ia tidak sukar untuk dijelaskan. Fungsi Anonymous perlu mentafsir semula panggilan balik setiap kali, tetapi fungsi yang dinamakan hanya perlu ditafsirkan sekali, jadi prestasi akan dipertingkatkan . Tidak perlu memisahkan panggilan balik yang sangat mudah ditulis sebagai pembolehubah lain.
Selain itu, terdapat dua cara untuk menulis fungsi bernama:
Ekspresi fungsi
var func = function() {
console.log('a')
}
Pengisytiharan fungsi
function func() {
console.log('b')
}
Malah, mungkin ada masalah jika kedua-duanya digunakan bersama, seperti
var func = function() {
console.log('a')
}
function func() {
console.log('b')
}
//Outputnya ialah: a
Oleh itu, bentuk ungkapan fungsi kebanyakannya digunakan pada masa ini, tetapi apakah prestasi pengisytiharan fungsi?
bernama2.js
kiraan var = 100000000
, jumlah = 0
fungsi cb() {
jumlah
}
sementara (kira--) cb()
Laksanakan dan bandingkan keduanya
$ nod masa bernama.js
0m0.553s sebenar
pengguna 0m0.000s
sys 0m0.015s
$ nod masa bernama2.js
0m0.529s sebenar
pengguna 0m0.000s
sys 0m0.047s
Nampaknya pengisytiharan fungsi akan menjadi lebih cepat, tetapi kelajuannya sangat, sangat tidak jelas, secara peribadi, saya masih mengesyorkan menulis pengisytiharan fungsi.
PS: Data ini telah diuji menggunakan git-base di bawah Windows 7.