Artikel sebelumnya menyebutkan berbagai cara menyebut fungsi anonim. Artikel ini melihat berbagai cara untuk memanggil fungsi bernama.
1. ()
Fungsi yang paling umum digunakan adalah memanggil/menjalankan fungsi:
Salinan kode adalah sebagai berikut:
// Tidak ada fungsi parameter fun1
fungsi fun1 () {
waspada ('saya dipanggil');
}
fun1 ();
// fungsi parameter fun2
fungsi fun2 (param) {
peringatan (param);
}
fun2 ('I'm dipanggil');
Setelah ecmascript3, hubungi dan terapkan fungsi, ada dua jenis fungsi.
2. Panggilan
Salinan kode adalah sebagai berikut:
// Tidak ada fungsi parameter fun1
fungsi fun1 () {
waspada ('saya dipanggil');
}
fun1.call (null);
// fungsi parameter fun2
fungsi fun2 (param) {
peringatan (param);
}
fun2.call (null, 'I'm dipanggil')
3. Terapkan
Salinan kode adalah sebagai berikut:
// Tidak ada fungsi parameter fun1
fungsi fun1 () {
waspada ('saya dipanggil');
}
fun1.apply (null);
// fungsi parameter fun2
fungsi fun2 (param) {
peringatan (param);
}
fun2.apply (null, ['I'm called'])
Meskipun panggilan, Apply dapat digunakan murni untuk memanggil/mengeksekusi fungsi, mereka lebih digunakan untuk mengubah konteks eksekusi fungsi.
4. Baru (metode ini tidak disarankan)
Salinan kode adalah sebagai berikut:
// Tidak ada fungsi parameter fun1
fungsi fun1 () {
waspada ('saya dipanggil');
}
fun1 baru ();
// fungsi parameter fun2
fungsi fun2 (param) {
peringatan (param);
}
Fun2 baru ('I'm Called')
Inti dari baru adalah membuat/membangun instance dari suatu kelas. Fun1 dan fun2 yang didefinisikan di sini jelas bukan kelas (bukan ini, tidak ada prototipe). Namun kedua fungsi memang dieksekusi. Ini adalah efek samping dari yang baru.
Dari metode panggilan di atas, tidak ada perbedaan dalam hasil eksekusi dari empat metode. Tetapi jika fungsi memiliki nilai pengembalian, itu mungkin mengecewakan Anda saat menyebutnya dengan cara baru.
Salinan kode adalah sebagai berikut:
// Fungsi menyenangkan dengan nilai pengembalian
function fun () {
waspada ('saya dipanggil');
mengembalikan "jack";
}
var c = new fun ();
peringatan (c); // [objek objek], mengapa tidak "jack"?
Ubah ini menjadi ini
Salinan kode adalah sebagai berikut:
// Fungsi menyenangkan dengan nilai pengembalian
function fun () {
waspada ('saya dipanggil');
return {name: 'jack'};
}
var c = new fun ();
peringatan (c.name); // jack, itu dikembalikan secara normal
Untuk meringkas: saat memanggil fungsi dengan cara baru. Jika ada nilai pengembalian, nilai tidak akan dikembalikan ketika nilai pengembalian adalah tipe bawaan (tipe dasar) dari JavaScript seperti string (string), angka (angka), boolean, dll.; Ketika nilai pengembalian adalah jenis objek, objek, fungsi, dan array akan dikembalikan secara langsung.
Ketika nilai pengembalian adalah tipe bawaan (tipe dasar), apa sebenarnya yang dikembalikan baru () baru? Artikel berikutnya akan membahas rincian panggilan metode baru.