Sintaks JavaScript fleksibel, dan tidak jarang memiliki lima atau enam metode implementasi untuk fungsi yang sama. Saya sering tidak mengerti perbedaan antara panggilan dan melamar, jadi saya akan merekamnya hari ini untuk menghindari melupakannya lagi.
Dalam JavaScript, metode dapat dieksekusi dengan cara berikut:
1.Func () adalah cara panggilan yang paling langsung dan umum, dan juga sesuai dengan logika pemikiran orang biasa, tetapi dalam beberapa kasus ada beberapa kekurangan, yang akan dijelaskan di bawah ini.
2. (function (arg) {}) (jendela), panggilan metode anonim, lebih berguna saat membangun namespace.
3.Func.Bind (STH) ().
4.func.call (), ini adalah cara kedua panggilan.
5.Func.Amply (), saudara kembar panggilan.
func ()
Ini adalah cara yang paling umum untuk menelepon dan dapat dilihat di mana -mana dalam bahasa apa pun. func (x, y) dapat lulus dalam parameter yang berbeda. Dalam beberapa bahasa, seperti PHP, Java, panggilan semacam ini sudah cukup untuk menyelesaikan semua masalah. Tetapi JavaScript adalah bahasa fungsional, dan konsep penutupan dan kata kunci aneh ini menentukan kekurangan dari cara memanggil ini. Ini harus ditafsirkan sebagai ruang lingkup segmen kode saat ini, yang akan berubah ketika kode dijalankan ke fragmen yang berbeda.
Salinan kode adalah sebagai berikut:
var a = {};
var func = function (x) {
Console.log (ini);
};
a.onClick = function () {
var x = 100;
func (x);
};
a.onclick ();
Anda dapat menganggap A sebagai tautan di halaman. Ini memiliki masalah. Pada saat ini, menggunakan func () sebagai metode panggilan langsung tidak dimungkinkan, jadi kita perlu mengikat ini di luar func dengan metode func. Jadi ada metode ikatan, panggilan, terapkan.
mengikat
Tujuan BIND sangat sederhana, mengembalikan metode yang sama yang mengikat objek ini. Kode di atas dapat mencapai tujuan mengikat ini pada objek A dengan memodifikasi satu baris.
Salinan kode adalah sebagai berikut:
var a = {};
var func = function (x) {
Console.log (ini);
};
a.onClick = function () {
var x = 100;
func.Bind (ini) (x); // Bind di sini
};
a.onclick ();
Dengan cara ini, acara OnClick ini tidak akan berjalan seperti lalat tanpa kepala.
Hubungi & Terapkan
Panggil dan berlaku harus dibicarakan bersama karena mereka sangat mirip. Mereka semua mendukung beberapa parameter, dan parameter pertama adalah objek ini yang akan terikat, dan parameter kedua adalah perbedaannya. Terkadang kami tidak ingin mengubah objek ini, tetapi kami ingin mengikatnya secara artifisial ke objek lain. (Bukannya Anda tidak dapat menggunakan Bind, tetapi tampaknya BIND muncul terlambat, sehingga kompatibilitas browser mungkin buruk). Ambil kastanye:
Salinan kode adalah sebagai berikut:
a = {
func: function () {
this.x += 1;
},
X: 0
};
b = {
A A,
X: 20
};
untuk (var i = 0; i <10; i ++) {
bafunc ();
}
Console.log (AX);
console.log (bx);
Ada X di objek A dan B di atas. Ubah kode untuk mencapai tujuan memodifikasi BX
Salinan kode adalah sebagai berikut:
a = {
func: function () {
this.x += 1;
},
X: 0
};
b = {
A A,
X: 20
};
untuk (var i = 0; i <10; i ++) {
Bafunc.call (b);
}
Console.log (AX);
console.log (bx);
Chestnut ini tidak diterima dengan baik, dan ini adalah gaya kode yang sangat membingungkan, dengan skenario yang berlaku, tetapi tidak tersedia di mana-mana.