Javascript adalah bahasa skrip yang mendukung fungsi canggih seperti pemrograman fungsional, penutupan, pewarisan berbasis prototipe, dll. JavaScript tampaknya mudah untuk memulai pada awalnya, tetapi ketika Anda menggunakannya secara mendalam, sebenarnya sulit untuk menguasai JavaScript, dan beberapa konsep dasar luar biasa. Di antara mereka, kata kunci ini dalam JavaScript adalah konsep yang relatif membingungkan. Dalam skenario yang berbeda, ini akan menjadi objek yang berbeda. Ada tampilan yang hanya dengan menguasai kata kunci ini dengan benar di JavaScript Anda dapat memasukkan ambang bahasa JavaScript. Dalam bahasa yang berorientasi objek utama (seperti Java, C#, dll.), Ini berarti jelas dan spesifik, yaitu, menunjuk pada objek saat ini. Umumnya terikat selama periode kompilasi. Ini terikat selama runtime di JavaScript, yang merupakan alasan penting mengapa kata kunci ini memiliki banyak makna di JavaScript.
Karena fitur yang mengikatnya selama runtime, ini di JavaScript dapat menjadi objek global, objek saat ini atau objek apa pun, yang sepenuhnya tergantung pada cara fungsi tersebut disebut. Ada beberapa cara untuk memanggil fungsi di JavaScript:
Disebut sebagai metode objek;
sebagai panggilan fungsi;
Disebut sebagai konstruktor;
Gunakan Apply atau Call untuk menelepon.
Seperti kata pepatah, karakter tidak sebagus bentuk, dan bentuk tidak sebagus gambar. Untuk membuat orang lebih memahami apa javascript ini menunjuk? Berikut adalah gambar untuk dijelaskan:
Pada gambar di atas, saya menyebutnya "JavaScript pohon keputusan ini" (dalam mode non-ketat). Berikut ini adalah contoh untuk menggambarkan bagaimana angka ini dapat membantu kami menilai ini:
var point = {x: 0, y: 0, moveto: function (x, y) {this.x = this.x + x; this.y = this.y + y; }}; // Penjelasan pohon keputusan: fungsi point.moveto (1,1) tidak dipanggil untuk yang baru, memasuki veto, // disebut dengan dot (.), Dan kemudian menunjuk ke objek panggilan sebelum .Moveto, yaitu, pointpoint.moveto (1,1); // Ini terikat pada objek saat ini, yaitu objek titikApakah panggilan fungsi point.moveto dipanggil dengan yang baru? Ini jelas tidak. Masuk ke cabang "tidak", yaitu fungsi yang disebut dengan DOT (.)? ;
Fungsi point.moveto dipanggil dengan dot (.), Yaitu, ia memasuki cabang "ya", yaitu, ini menunjuk ke titik objek sebelum point.moveto.
Diagram analisis tentang apa titik ini pada titik gambar. Fungsi Moveto ditunjukkan pada gambar berikut:
Mari berikan contoh lain, lihat kode berikut:
fungsi fungsi (x) {this.x = x; } func (5); // Ini adalah jendela objek global, x adalah variabel global // analisis pohon keputusan: apakah fungsi func () dipanggil dengan yang baru? Untuk tidak, apakah itu dipanggil dengan DOT saat memasuki fungsi func ()? Untuk tidak, ini menunjuk ke WindowX objek global; // x => 5Proses menentukan fungsi fungsi () dalam "JavaScript pohon keputusan ini" adalah sebagai berikut:
Apakah panggilan fungsi func (5) dipanggil dengan yang baru? Ini jelas tidak. Masuk ke cabang "tidak", yaitu fungsi yang disebut dengan DOT (.)? ;
Fungsi fungsi (5) tidak dipanggil dengan dot (.), Yaitu, ia memasuki cabang "tidak", yaitu, titik ini ke jendela variabel global, maka this.x sebenarnya window.x.
Diagram analisis dari apa yang ditunjukkan fungsi fungsi fungsi ini ditunjukkan pada gambar berikut:
Untuk metode memanggil langsung sebagai fungsi, mari kita lihat contoh yang kompleks:
var point = {x: 0, y: 0, moveto: function (x, y) {// fungsi dalam var movex = function (x) {this.x = x; // apa yang terjadi? jendela}; // fungsi internal var movey = fungsi (y) {this.y = y; // apa yang terjadi? jendela}; movex (x); Movey (Y); }}; point.moveto (1,1); point.x; // => 0 point.y; // => 0 x; // => 1 y; // => 1Panggilan internal yang sebenarnya dari fungsi MOVEX () dan MOVEY (). Proses menentukan ini di dalam fungsi movex () dalam "JavaScript pohon keputusan ini" adalah sebagai berikut:
Apakah panggilan fungsi movex (1) dipanggil dengan yang baru? Ini jelas tidak. Masuk ke cabang "tidak", yaitu fungsi yang disebut dengan DOT (.)? ;
Fungsi MOVEX (1) tidak dipanggil dengan dot (.), Yaitu, ia memasuki cabang "tidak", yaitu, di sini menunjuk ke jendela variabel global, maka ini.x sebenarnya window.x.
Mari kita lihat contoh panggilan konstruktor:
titik fungsi (x, y) {this.x = x; // ini ? this.y = y; // ini?} var np = titik baru (1,1); np.x; // 1var p = titik (2,2); px; // Kesalahan, p adalah objek kosong yang tidak terdefinfinedwindow.x; // 2Proses menentukan ini dalam "JavaScript pohon keputusan ini" di fungsi titik (1,1) adalah sebagai berikut:
var np = baru adalah panggilan poin (1,1) dipanggil dengan yang baru? Ini jelas, memasuki cabang "ya", yaitu, ini menunjuk ke NP;
Maka this.x = 1, yaitu, np.x = 1;
Proses menentukan ini dalam "JavaScript Pohon Keputusan ini" dari fungsi titik (2,2) di var p = titik (2,2) adalah sebagai berikut:
Apakah panggilan var p = point (2,2) dipanggil dengan yang baru? Ini jelas tidak. Masuk ke cabang "tidak", yaitu fungsi yang disebut dengan DOT (.)? ;
Apakah fungsi titik (2,2) tidak dipanggil dengan dot (.)? Ditentukan sebagai tidak, yaitu, masukkan cabang "tidak", yaitu, ini di sini menunjuk ke jendela variabel global, maka this.x sebenarnya window.x;
This.x = 2 berarti window.x = 2.
Akhirnya, mari kita lihat contoh fungsi panggilan dengan panggilan dan terapkan:
titik fungsi (x, y) {this.x = x; this.y = y; this.moveto = function (x, y) {this.x = x; this.y = y; }} var p1 = titik baru (0, 0); var p2 = {x: 0, y: 0}; p1.moveto.Apply (p2, [10, 10]); // Apply sebenarnya p2.moveto (10, 10) p2.x // 10Proses menentukan fungsi p1.moveto.Apply (p2, [10,10]) dalam "JavaScript pohon keputusan ini" adalah sebagai berikut:
Kita tahu bahwa kedua metode tersebut berlaku dan panggilan sangat kuat, dan mereka memungkinkan pengalihan konteks eksekusi fungsi, yaitu objek yang terikat dengan ini. P1.Moveto.Apply (P2, [10,10]) sebenarnya adalah P2.Moveto (10,10). Kemudian p2.moveto (10,10) dapat diartikan sebagai:
Apakah panggilan fungsi dipanggil dengan yang baru? Ini jelas tidak. Masuk ke cabang "tidak", yaitu fungsi yang disebut dengan DOT (.)? ;
Fungsi P2.Moveto (10,10) dipanggil dengan DOT (.), Yaitu, ia memasuki cabang "Ya", yaitu, ini menunjuk ke objek P2 di P2.Moveto (10,10). Sebelumnya, jadi p2.x = 10.
Mengenai proses lingkungan eksekusi fungsi JavaScript, deskripsi dalam perpustakaan dokumen DeveloperWorks IBM terasa sangat bagus, dan kutipannya adalah sebagai berikut:
"Fungsi dalam JavaScript dapat dieksekusi sebagai fungsi biasa atau sebagai objek, yang merupakan alasan utama mengapa ini sangat kaya. Ketika suatu fungsi dieksekusi, lingkungan eksekusi (ExecutionContext) dibuat, dan semua perilaku fungsi selanjutnya. Inisialisasi variabel, pertama -tama inisialisasi tabel parameter formal dari fungsi tersebut, nilai adalah nilai yang sesuai dalam variabel argumen. Tidak ditentukan, dan operasi penugasan mereka hanya akan dieksekusi ketika fungsi dieksekusi setelah lingkungan eksekusi (ExecutionContext) berhasil dibuat. (ExecutionContext) berhasil dibuat, dan fungsi mulai mengeksekusi baris demi baris, dan variabel yang diperlukan dibaca dari lingkungan eksekusi (ExecutionContext) yang dibangun sebelumnya. "
Memahami bagian ini akan sangat bermanfaat untuk memahami fungsi JavaScript.