Mohon saran bagaimana meneruskan parameter ke fungsi yang disebut menggunakan setInterval
.
Contoh saya setInterval(funca(10,3), 500);
salah.
javascript
parameters
setinterval
Rakesh
sumber
sumber
.setInterval(func, delay[, param1, param2, ...]);
Jawaban:
Anda perlu membuat fungsi anonim sehingga fungsi sebenarnya tidak segera dijalankan.
sumber
function createInterval(f,dynamicParameter,interval) { setInterval(function() { f(dynamicParameter); }, interval); }
Kemudian menyebutnya sebagaicreateInterval(funca,dynamicValue,500);
Jelas Anda dapat memperpanjang ini untuk lebih dari satu parameter. Dan, tolong, gunakan nama variabel yang lebih deskriptif. :)funca
?sekarang dengan ES5, ikat metode Prototipe fungsi:
Referensi di sini
sumber
console.log.bind(null)("Log me")
akan melemparIllegal invocation
, tetapiconsole.log.bind(console)("Log me")
akan bekerja seperti yang diharapkan. Ini karenaconsole.log
memerlukanconsole
sebagaithis
argumen.Tambahkan mereka sebagai parameter ke setInterval:
Sintaks dalam pertanyaan Anda menggunakan eval, yang bukan praktik yang disarankan.
sumber
Anda dapat melewatkan parameter sebagai properti dari objek fungsi, bukan sebagai parameter:
Kemudian dalam fungsi
someFunction
Anda, Anda akan memiliki akses ke parameter. Ini sangat berguna di dalam kelas di mana ruang lingkup pergi ke ruang global secara otomatis dan Anda kehilangan referensi ke kelas yang disebut setInterval untuk memulai. Dengan pendekatan ini, "parameter2" di "someFunction", dalam contoh di atas, akan memiliki cakupan yang tepat.sumber
sumber
Anda dapat menggunakan fungsi anonim;
sumber
Pembaruan: 2018 - gunakan operator "spread"
sumber
Sejauh ini jawaban yang paling praktis adalah yang diberikan oleh tvanfosson, yang bisa saya lakukan adalah memberi Anda versi terbaru dengan ES6:
sumber
Mengutip argumen harus cukup:
Catat kutipan tunggal
'
untuk setiap argumen.Diuji dengan IE8, Chrome dan FireFox
sumber
Saya tahu topik ini sudah sangat tua tetapi ini adalah solusi saya untuk melewatkan parameter dalam
setInterval
fungsi.Html:
JavaScript:
sumber
timer
), tetapi bagaimana AndaclearInterval()
dalam skenario ini?Ini berhasil
setInterval("foo(bar)",int,lang);
.... Jon Kleiser menuntun saya ke jawabannya.sumber
Solusi lain terdiri atas fungsi Anda seperti itu (jika Anda punya dinamika vars): setInterval ('funca (' + x + ',' + y + ')', 500);
sumber
Anda dapat menggunakan perpustakaan yang disebut underscore js. Ini memberikan pembungkus yang bagus pada metode bind dan sintaks yang jauh lebih bersih juga. Memungkinkan Anda menjalankan fungsi dalam cakupan yang ditentukan.
http://underscorejs.org/#bind
_.bind (fungsi, lingkup, * argumen)
sumber
Masalah itu akan menjadi demonstrasi yang bagus untuk penggunaan penutupan. Idenya adalah bahwa suatu fungsi menggunakan variabel lingkup luar. Berikut ini sebuah contoh ...
Fungsi "makeClosure" mengembalikan fungsi lain, yang memiliki akses ke "nama" variabel lingkup luar. Jadi, pada dasarnya, Anda perlu meneruskan variabel apa pun untuk fungsi "makeClosure" dan menggunakannya dalam fungsi yang ditetapkan untuk variabel "ret". Secara efektif, setInterval akan menjalankan fungsi yang ditetapkan untuk "ret".
sumber
Saya memiliki masalah yang sama dengan aplikasi Vue. Dalam kasus saya, solusi ini hanya berfungsi jika fungsi anonim telah dideklarasikan sebagai fungsi panah, terkait deklarasi di
mounted ()
hook lingkaran kehidupan.sumber