Rumah >hujung hadapan web >tutorial js >Mengapakah setTimeout Mempunyai Fungsi Panggilan Cara Berbeza?

Mengapakah setTimeout Mempunyai Fungsi Panggilan Cara Berbeza?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-25 12:36:11221semak imbas

Why Does setTimeout Have Different Ways of Calling Functions?

Membedah setTimeout's Parentheses and Quotation Enigma

Apabila menyelidiki peristiwa pemasaan JavaScript, fungsi setTimeout sering menimbulkan kekeliruan disebabkan penggunaannya yang pelbagai . Mari kita jelaskan perbezaan antara tiga cara biasa untuk memanggilnya:

Dengan Tanda Kurung

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.

Tanpa Petikan dan Tanda Kurung

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.

Hanya Menggunakan Petikan

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn