Bagaimana cara melewati fungsi sebagai parameter tanpa fungsi yang mengeksekusi di fungsi "induk" atau menggunakan eval()
? (Karena saya sudah membaca bahwa itu tidak aman.)
Aku punya ini:
addContact(entityId, refreshContactList());
Ini berhasil, tetapi masalahnya adalah itu refreshContactList
api ketika fungsi dipanggil, bukan ketika itu digunakan dalam fungsi.
Saya bisa mengatasinya dengan menggunakan eval()
, tetapi itu bukan praktik terbaik, menurut apa yang saya baca. Bagaimana saya bisa melewatkan fungsi sebagai parameter dalam JavaScript?
javascript
function
parameters
imperium2335
sumber
sumber
addContact(1, function(id) { console.log(id); });
=
tanda ...class myFuncs {
daripadaclass myFuncs = {
. Anda juga harus menjalankan dalam lingkungan yang mendukung sintaksis kelas (belum semua browser mendukungnya). Jika Anda masih berjuang, mungkin lebih cocok untuk pertanyaan yang sama sekali baru karena masalah Anda bukan tentang fungsi lulus - itu adalah sintaks ES umum.Jika Anda ingin melewatkan fungsi, cukup rujuk dengan nama tanpa tanda kurung:
Tetapi kadang-kadang Anda mungkin ingin melewatkan fungsi dengan argumen yang disertakan , tetapi tidak memanggilnya sampai panggilan balik dipanggil. Untuk melakukan ini, saat memanggilnya, cukup bungkus dalam fungsi anonim, seperti ini:
Jika Anda suka, Anda juga bisa menggunakan fungsi terapkan dan memiliki parameter ketiga yang merupakan array argumen, seperti:
sumber
Contoh 1:
Contoh 2:
Lihat ini
sumber
Untuk melewatkan fungsi sebagai parameter, cukup hapus tanda kurung!
Gagasan di balik ini adalah bahwa fungsi sangat mirip dengan variabel. Alih-alih menulis
Anda mungkin juga menulis
Ada perbedaan kecil di antara keduanya, tapi bagaimanapun - keduanya merupakan cara yang valid untuk mendefinisikan suatu fungsi. Sekarang, jika Anda mendefinisikan suatu fungsi dan secara eksplisit menetapkannya ke suatu variabel, tampaknya cukup logis, bahwa Anda dapat meneruskannya sebagai parameter ke fungsi lain, dan Anda tidak perlu tanda kurung:
sumber
typeof paramFunc == "function"
sudah, karena jika tidak bisa dipanggil, maka Anda dapat mengabaikannya.Ada ungkapan di antara programmer JavaScript: "Eval is Evil" jadi cobalah menghindarinya dengan cara apa pun!
Selain jawaban Steve Fenton, Anda juga dapat melewati fungsi secara langsung.
sumber
Saya memotong semua rambut saya dengan masalah itu. Saya tidak dapat membuat contoh di atas berfungsi, jadi saya berakhir seperti:
Dan itu berfungsi seperti pesona ... untuk setidaknya yang saya butuhkan. Semoga ini bisa membantu.
sumber
Saya menyarankan untuk meletakkan parameter dalam array, dan kemudian membaginya menggunakan
.apply()
fungsi. Jadi sekarang kita dapat dengan mudah melewatkan fungsi dengan banyak parameter dan menjalankannya dengan cara yang sederhana.sumber
Anda juga dapat menggunakan
eval()
untuk melakukan hal yang sama.Itu dia. Saya juga mencari solusi ini dan mencoba solusi yang disediakan di jawaban lain tetapi akhirnya berhasil dari contoh di atas.
sumber
Ini dia pendekatan lain:
sumber
Bahkan, sepertinya agak rumit, bukan.
dapatkan metode sebagai parameter:
Anda dapat memberikan sebagai metode parameter:
sumber
Jawaban lain melakukan pekerjaan yang sangat baik untuk menggambarkan apa yang sedang terjadi, tetapi satu "gotcha" yang penting adalah memastikan bahwa apa pun yang Anda lewati memang referensi ke suatu fungsi.
Misalnya, jika Anda melewati string alih-alih fungsi, Anda akan mendapatkan kesalahan:
Lihat JsFiddle
sumber
Suatu saat ketika Anda perlu berurusan dengan event handler sehingga perlu melewati acara juga sebagai argumen, sebagian besar perpustakaan modern suka bereaksi, sudut mungkin memerlukan ini.
Saya perlu mengganti fungsi OnSubmit (fungsi dari perpustakaan pihak ketiga) dengan beberapa validasi khusus pada reactjs dan saya melewati fungsi dan acara keduanya seperti di bawah ini
SEMULA
BUAT FUNGSI BARU
upload
dan dipanggil lewatonSubmit
dan acara sebagai argumensumber
Anda dapat menggunakan JSON juga untuk menyimpan dan mengirim fungsi JS.
Periksa yang berikut ini:
Ini akan mencetak 'a'.
Berikut ini memiliki efek yang sama dengan yang di atas:
Yang juga memiliki efek yang sama dengan yang berikut:
Dan paradigma objek menggunakan Kelas sebagai prototipe objek:
sumber