Ada beberapa cara untuk memanggil fungsi JS:
(1) Panggil fungsi yang disebutkan secara langsung
Salinan kode adalah sebagai berikut:
function foo ()
{
}
foo ();
(2) Fungsi anonim disebut dengan referensi
Salinan kode adalah sebagai berikut:
fooref = function ()
{
}
fooref ();
(3) Panggilan fungsi anonim tanpa referensi 1
Salinan kode adalah sebagai berikut:
(fungsi()
{
} ());
(4) Panggilan fungsi anonim tanpa referensi 2
Salinan kode adalah sebagai berikut:
(fungsi()
{
}) ();
(5) Panggilan fungsi anonim tanpa referensi 3
Salinan kode adalah sebagai berikut:
function void ()
{
} ();
Gambar 1.1 dan Gambar 1.2 menunjukkan bahwa proses operasi kedua ekspresi ini berbeda. Pada Gambar 1.1, operator paksa digunakan untuk memungkinkan operasi panggilan fungsi dieksekusi. Pada Gambar 1.2, operator paksa digunakan untuk mengoperasikan ekspresi "fungsi deklarasi kuantitas langsung" dan mengembalikan referensi ke fungsi itu sendiri, dan kemudian referensi fungsi dioperasikan melalui operasi panggilan fungsi "()". Fungsi anonim terakhir di atas panggilan void function () {} (); digunakan untuk memanggil fungsi dan mengabaikan nilai pengembalian. Void operator digunakan untuk membuat ekspresi fungsi yang mengikutinya melakukan operasi. Jika kita tidak menggunakan "batal" dan operasi paksa "()", dapatkah kode dieksekusi:
(1) function () {} () // gunakan '' () "untuk memaksa panggilan
(2) function () {} (); //Menggunakan ";" untuk melaksanakan pernyataan itu
Mesin skrip akan berpikir bahwa fungsi () {} adalah deklarasi fungsi, sehingga tidak dapat melewati deteksi sintaks, dan kode diuraikan seperti ini:
fungsi(){};();
function () {} ditafsirkan sebagai deklarasi, sementara "();" ditafsirkan secara independen sebagai garis, sehingga kesalahan sintaks akan dilaporkan. Mengapa Anda tahu bahwa itu adalah kesalahan yang disebabkan oleh "();"? Kami mengubahnya menjadi kode berikut:
function () {} (1);
Ini akan dijelaskan oleh mesin sebagai:
fucntion () {};
(1); // Ekspresi nilai tunggal
Oleh karena itu, deteksi sintaks berlalu ...