Apakah mungkin untuk melewatkan fungsi javascript dengan parameter sebagai parameter?
Contoh:
$(edit_link).click( changeViewMode( myvar ) );
javascript
Lucia
sumber
sumber
Jawaban:
Gunakan "penutupan":
Ini menciptakan pembungkus fungsi sementara anonim yang tahu tentang parameter dan meneruskannya ke implementasi panggilan balik yang sebenarnya.
sumber
this.myFunction = this.myFunction.bind(this)
Andaconstructor
. Tetapi, seperti yang Anda katakan, ketika Anda harus memberikan konteks berbeda untuk masing-masing, seperti semua baris yang Anda klik untuk membuka halaman detail baris itu, itu tidak dapat dihindari.Gunakan
Function.prototype.bind()
. Mengutip MDN:Ini didukung oleh semua browser utama, termasuk IE9 +.
Kode Anda akan terlihat seperti ini:
Catatan: Saya menganggap Anda berada dalam konteks global, yaitu
this
variabelnya adalahwindow
; jika tidak gunakanthis
sebagai gantinull
.sumber
$.ajax(url).done(handler.bind(this, var1, var2));
Tidak, tetapi Anda dapat melewatkannya tanpa parameter, dan lakukan ini:
Jadi Anda melewati fungsi anonim tanpa parameter, fungsi itu lalu memanggil fungsi parameter Anda dengan variabel dalam penutupan
sumber
Ya seperti ini:
sumber
Atau jika Anda menggunakan es6, Anda harus dapat menggunakan fungsi panah
sumber
Kamu bisa melakukan ini
lalu
Atau jika panggilan balik Anda mengandung logika yang lebih fleksibel, Anda dapat melewati objek.
Demo
sumber
Ini adalah contoh mengikuti pendekatan Ferdinand Beyer:
Dalam contoh ini "nilai parameter" dilewatkan dari function1 ke function3 melalui function2 menggunakan pembungkus fungsi.
sumber