Pengisytiharan frekuensi telah digunakan secara meluas untuk masa yang lama, tetapi ekspresi fungsi telah dikuasai secara beransur -ansur. Ramai pemaju tidak pasti apabila menggunakan yang mana, yang akhirnya membawa kepada pilihan yang salah.
Terdapat beberapa perbezaan utama antara ekspresi fungsi dan pengisytiharan fungsi. Mari kita lihat dengan lebih dekat perbezaan ini dan bila menggunakan ekspresi fungsi dan pengisytiharan fungsi dalam kod anda.
function funcDeclaration() { return '函数声明'; } let funcExpression = function () { return '函数表达式'; }
function
seperti yang anda lihat, mengisytiharkan nama fungsi (
function myFunction() { // 执行某些操作 };
Ini adalah contoh perisytiharan fungsi: myFunction
Apakah ungkapan fungsi?
function add(a, b) { return a + b; };
. Ini bermakna anda perlu menentukannya sebelum memanggil fungsi tersebut.
let myFunction = function() { // 执行某些操作 };
myFunction
Terdapat beberapa perbezaan utama antara ekspresi fungsi dan pengisytiharan fungsi:
let add = function (a, b) { return a + b; };
Sama seperti let
pernyataan, pengisytiharan fungsi dipromosikan ke bahagian atas kod lain.
Ekspresi fungsi tidak akan dipromosikan. Ini membolehkan mereka mengekalkan salinan pembolehubah tempatan yang diambil dari skop di mana ia ditakrifkan.
Biasanya, anda boleh menggunakan pengisytiharan fungsi dan ekspresi fungsi secara bergantian. Walau bagaimanapun, kadang-kadang ekspresi fungsi membawa kepada kod yang lebih mudah untuk difahami tanpa memerlukan nama fungsi sementara.
Jadi, bilakah ekspresi berfungsi digunakan dan kapan harus berfungsi pengisytiharan digunakan?
Jawapannya bergantung pada keperluan anda. Jika anda memerlukan fungsi yang lebih fleksibel atau fungsi yang tidak akan dipromosikan, ekspresi fungsi adalah pilihan terbaik. Jika anda memerlukan fungsi yang lebih mudah dibaca dan difahami, gunakan perisytiharan fungsi.
Seperti yang anda lihat, kedua -dua sintaks adalah serupa. Perbezaan yang paling jelas ialah ekspresi fungsi tidak dikenali, sementara pengisytiharan fungsi terkenal.
pada masa kini, apabila anda perlu melakukan sesuatu yang tidak dapat dilakukan oleh ekspresi fungsi, pengisytiharan fungsi biasanya digunakan. Jika anda tidak perlu melakukan operasi yang hanya boleh dilakukan dengan perisytiharan fungsi, biasanya lebih baik menggunakan ekspresi fungsi.
Gunakan perisytiharan fungsi apabila anda perlu membuat fungsi rekursif atau perlu memanggil fungsi sebelum mendefinisikannya. Sebagai peraturan, apabila anda tidak perlu melakukan kedua -duanya, gunakan ungkapan fungsi untuk menulis kod bersih.
Terdapat beberapa kelebihan utama untuk menggunakan pengisytiharan fungsi.
Ekspresi fungsi juga mempunyai beberapa kelebihan.
Dalam kebanyakan kes, mudah untuk menentukan kaedah mana untuk menentukan fungsi yang terbaik untuk keperluan anda. Garis panduan ini akan membantu anda membuat keputusan dengan cepat dalam kebanyakan kes.
Gunakan pengisytiharan fungsi dalam kes -kes berikut:
Gunakan ekspresi fungsi dalam kes -kes berikut:
iaitu, dalam banyak kes, fleksibiliti ekspresi fungsi menjadi kelebihan yang kuat.
Terdapat banyak cara untuk fungsi ekspresi lebih berguna daripada pengisytiharan fungsi.
Penutupan boleh digunakan apabila anda ingin lulus parameter ke fungsi sebelum melaksanakannya. Contoh yang baik tentang bagaimana manfaat ini anda ketika gelung melalui nodel.
Penutupan membolehkan anda mengekalkan maklumat tambahan, seperti indeks, apabila maklumat tidak tersedia selepas fungsi dilaksanakan.
function funcDeclaration() { return '函数声明'; } let funcExpression = function () { return '函数表达式'; }
Pengendali acara tambahan dilaksanakan kemudian (selepas gelung berakhir), jadi penutupan diperlukan untuk mengekalkan nilai yang sesuai dari gelung for
.
function myFunction() { // 执行某些操作 };
Lebih mudah untuk memahami mengapa masalah berlaku dengan mengekstrak fungsi for
dari gelung doSomething()
.
function add(a, b) { return a + b; };
Penyelesaian di sini adalah untuk lulus indeks sebagai parameter fungsi ke fungsi luaran supaya ia dapat lulus nilai ke fungsi dalaman. Anda biasanya akan melihat maklumat yang anda perlukan untuk menggunakan fungsi pengendali untuk mengatur fungsi pulangan dalaman.
let myFunction = function() { // 执行某些操作 };
Ketahui lebih lanjut mengenai pakej penutup dan penggunaannya.
Ekspresi fungsi boleh diluluskan terus ke fungsi tanpa perlu memberikan nilai kepada pembolehubah sementara pertengahan.
anda melihat mereka paling kerap dalam bentuk fungsi tanpa nama. Berikut adalah contoh yang biasa dari ekspresi fungsi jQuery:
let add = function (a, b) { return a + b; };
Ekspresi fungsi juga digunakan untuk memproses item array apabila menggunakan kaedah seperti forEach()
.
mereka juga tidak perlu disebutkan fungsi tanpa nama. Adalah lebih baik untuk menamakan ekspresi fungsi untuk membantu menyatakan fungsi apa yang harus dilakukan dan membantu debug:
function tabsHandler(index) { return function tabClickEvent(evt) { // 对选项卡执行操作。 // 可以从此处访问 index 变量。 }; } let tabs = document.querySelectorAll('.tab'), i; for (i = 0; i < tabs.length; i += 1) { tabs[i].onclick = tabsHandler(i); }
IIFE membantu mencegah fungsi dan pembolehubah anda daripada mempengaruhi skop global.
Semua sifat di dalamnya berada dalam skop fungsi tanpa nama. Ini adalah corak yang sama untuk mengelakkan kesan sampingan yang tidak dijangka atau tidak diingini dari kod di tempat lain.
Ia juga digunakan sebagai mod modul untuk memasukkan blok kod dalam bahagian yang mudah dikekalkan. Kami meneroka ini lebih mendalam dalam mengungkap misteri penutupan JavaScript, panggilan balik, dan Iife.
ini adalah contoh mudah Iife:
function funcDeclaration() { return '函数声明'; } let funcExpression = function () { return '函数表达式'; }
... Apabila digunakan sebagai modul, kod itu dapat dikekalkan dengan mudah.
function myFunction() { // 执行某些操作 };
Seperti yang dapat kita lihat, ekspresi fungsi tidak pada dasarnya berbeza daripada pengisytiharan fungsi, tetapi mereka sering boleh menghasilkan kod yang lebih bersih dan lebih mudah dibaca.
Mereka digunakan secara meluas, menjadikannya bahagian penting dari setiap kotak alat pemaju. Adakah anda menggunakan ekspresi fungsi dalam kod anda dengan cara yang menarik yang saya tidak sebutkan di atas? Tolong beritahu saya dalam komen!
Perbezaan utama antara ekspresi fungsi dan pengisytiharan fungsi adalah cara enjin JavaScript menafsirkannya. Pengisytiharan fungsi dihuraikan sebelum sebarang kod dilaksanakan, yang bermaksud anda boleh memanggil fungsi yang diisytiharkan kemudian dalam kod anda. Ini dipanggil fungsi mengangkat. Sebaliknya, ungkapan fungsi tidak dipromosikan dan oleh itu tidak boleh dipanggil sebelum definisi.
Sudah tentu, inilah contoh masing -masing:
Pengisytiharan fungsi:
function add(a, b) { return a + b; };
let myFunction = function() { // 执行某些操作 };
Bolehkah ekspresi fungsi dinamakan?
let add = function (a, b) { return a + b; };
Apakah ungkapan fungsi yang dipanggil dengan segera (Iife)?
function tabsHandler(index) { return function tabClickEvent(evt) { // 对选项卡执行操作。 // 可以从此处访问 index 变量。 }; } let tabs = document.querySelectorAll('.tab'), i; for (i = 0; i < tabs.length; i += 1) { tabs[i].onclick = tabsHandler(i); }
Ekspresi fungsi memberikan beberapa kelebihan. Mereka boleh tanpa nama, boleh ditetapkan untuk dilaksanakan sendiri (ekspresi fungsi panggilan segera), dan boleh diberikan kepada pembolehubah dan diluluskan. Ini menjadikan ekspresi fungsi sangat sesuai untuk digunakan sebagai penutupan dan fungsi panggil balik.
Secara amnya, perbezaan prestasi antara ekspresi fungsi dan pengisytiharan fungsi tidak dapat diabaikan dan tidak mungkin mempengaruhi prestasi kod JavaScript. Pilihan ekspresi fungsi dan pengisytiharan fungsi harus berdasarkan kes penggunaan khusus dan pilihan gaya pengekodan anda.
Ya, ekspresi fungsi sering digunakan untuk membuat penutupan dalam JavaScript. Penutupan adalah fungsi yang boleh mengakses skopnya sendiri, skop fungsi luaran, dan skop global. Berikut adalah contoh penutupan yang dibuat menggunakan ekspresi fungsi:
function funcDeclaration() { return '函数声明'; } let funcExpression = function () { return '函数表达式'; }
Atas ialah kandungan terperinci Bila Menggunakan Ekspresi Fungsi vs Perisytiharan Fungsi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!