Saya menggunakan ini selama wawancara beberapa hari yang lalu. Pewawancara mengatakan bahwa pemahaman saya agak bias. Saya kembali membaca buku dan beberapa blog, dan melakukan beberapa tes. Saya menemukan bahwa pemahaman saya memang salah.
1. Variabel global
Itu harus menjadi yang paling umum digunakan. Sebut ini dalam fungsi, dan ini sebenarnya variabel global
var value = "0"; function mei () {var value = "1"; Console.log (this.value); // 0 console.log (nilai); // 1} mei ();Outputnya adalah 0 karena ini menunjuk ke global
2. Konstruktor
Ini adalah penggunaan yang lebih saya kenal. Gunakan ini di konstruktor. Setelah objek baru yang baru, ini menunjuk pada objek baru ini.
var value = "window"; function mei () {this.value = 1; this.show = function () {console.log (this.value)}} var m = mei baru (); Console.log (M.Value); // 1 m.show (); // 1Anda dapat melihat bahwa outputnya adalah 1 bukan jendela. Dapat dilihat bahwa karena konstruktor, ini di sini telah menunjuk ke objek baru alih -alih variabel global.
3. Hubungi dan terapkan
Meminjam contoh dari panggilan saya dan menerapkan blog secara langsung
var p = "456"; fungsi f1 () {this.p = "123"; } function f2 () {console.log (this.p); } f2 (); // 456 f2.call (f1 ()); // 123 f2.Apply (f1 ()); // 123Output dari baris pertama mudah dimengerti. Ini menunjuk ke global. 123 adalah karena setelah menggunakan panggilan atau berlaku, ini di F2 poin ke F1, dan P di F1 adalah 123. Silakan klik pada posting blog untuk detailnya.
4. Fungsi ini disebut sebagai metode suatu objek (di mana saya membuat kesalahan)
Pada saat itu, saya meminta saya untuk menulis objek dengan beberapa metode. Saya mendefinisikan variabel global dalam pikiran saya, dan kemudian menyebut ini dalam metode objek. Pewawancara bertanya kepada saya apa ini? Saya mengatakan itu harus menjadi jendela, karena saya menggunakan metode ini sangat sedikit, dan berpikir bahwa hanya baru atau panggilan yang akan mengubah arah ini, jadi dia mengatakan itu salah dan meminta saya untuk kembali dan melihatnya sendiri. Sekarang saya sudah mencobanya, saya benar -benar salah. Posting kode
var value = "ayah"; function mei () {} mei.value = "child"; mei.get = function () {console.log (this.value)}; mei.show = function () {console.log (value)}; mei.get (); // anak mei.show (); //ayahKarena Get dipanggil sebagai metode Mei, ini di sini menunjuk ke mei. Nilai jadi output child
Adapun ayah, saya mengerti seperti ini. Fungsi yang ditunjukkan oleh Show didefinisikan dalam lingkungan global. Karena rantai lingkup, tidak ada nilai yang ditemukan dalam pertunjukan, jadi saya mendefinisikan lingkungannya dan menemukannya. Ini menemukan nilai global. Jika ada kesalahan dalam pemahaman di sini, saya harap seorang teman dapat menunjukkannya!