Apabila menyelidiki peristiwa pemasaan JavaScript, fungsi setTimeout sering menimbulkan kekeliruan disebabkan penggunaannya yang pelbagai . Mari kita jelaskan perbezaan antara tiga cara biasa untuk memanggilnya:
setTimeout("alertMsg()", 3000);
Dalam sintaks ini, fungsi dihantar sebagai rentetan dalam dua kali ganda petikan. JavaScript mentafsir ini sebagai rentetan kod yang akan dilaksanakan selepas masa yang ditentukan. Penggunaan ini tidak digalakkan kerana kelemahan keselamatan.
setTimeout(alertMsg, 3000);
Pendekatan yang lebih bersih ini meneruskan fungsi secara langsung sebagai rujukan. Rujukan boleh menjadi fungsi bernama, fungsi tanpa nama, atau pembolehubah yang menunjuk ke fungsi. Ini ialah kaedah pilihan kerana ia menghapuskan kemungkinan kebimbangan keselamatan dan memudahkan kod.
setTimeout("alertMsg", 3000);
Dalam sintaks pelik ini, rentetan dihantar tanpa kurungan. Kaedah ini ditamatkan dan boleh membawa kepada tingkah laku yang tidak dapat diramalkan.
Untuk memanggil fungsi dengan argumen dalam setTimeout, anda boleh sama ada membenamkan panggilan dalam panggilan balik atau menentukan argumen dalam sintaks yang terakhir (tidak serasi dengan penyemak imbas) :
setTimeout(function() { foo(arg1, arg2); }, 1000);
atau
setTimeout(foo, 2000, arg1, arg2);
Ingat, konteks panggil balik (ini kata kunci) lalai kepada objek global. Untuk mengubah suainya, gunakan kaedah bind():
setTimeout(function() { this === YOUR_CONTEXT; // true }.bind(YOUR_CONTEXT), 2000);
Adalah penting untuk ambil perhatian bahawa menghantar rentetan kepada setTimeout amat tidak digalakkan kerana risiko keselamatan. Sentiasa lulus rujukan fungsi secara langsung untuk mengekalkan keselamatan dan memastikan pelaksanaan boleh diramal.
Atas ialah kandungan terperinci Mengapakah setTimeout Mempunyai Fungsi Panggilan Cara Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!