Penelitian dan pengujian yang buta dan tidak berprinsip inilah yang membuat saya pingsan. Apakah perlu melakukan ini? Bahkan, tidak perlu melakukan begitu banyak tes setelah memahami prinsip -prinsip, dan kemudian menarik aturan. Aturan ecmascript telah ditentukan.
Aturan var adalah: gunakan var untuk mendeklarasikan variabel yang merupakan variabel internal, jika tidak, ia akan memanggil variabel global terlebih dahulu, tidak peduli berapa banyak lapisan fungsi.
Aturannya adalah: Ini dalam fungsi metode selalu menunjuk pada dirinya sendiri, dan ini dalam fungsi biasa selalu menunjuk ke DomWindow.
// goddamntest1function foo () {var a = 123; // variabel lokal, variabel global dari semua subfungsi this.a = 456; // Object Properti (function () {alert (a); // 123, Global Alert (this.a); // tidak terdefinisi, fungsi normal, titik ini ke DomWindow}) (); } var f = foo baru (); // goddamntest2function foo () {var a = 123; this.a = 456; (fungsi (a) {// Peringatan Deklarasi Lokal (a); // 456, global ditimpa oleh yang dinyatakan secara lokal oleh fungsi}) (this.a); } var f = foo baru (); // goddamntest3function foo () {var a = 123; this.a = 456; (function () {alert (a); // 123, Global Alert (this.a); // Undefined, domWindow this.b = 789; // window.b = 789}) (); (function () {alert (this.b); // 789, window.b}) (); } var f = foo baru (); (function () {alert (this.b); // 789, window.b}) (); // goddamntest4function foo () {(function () {this.b = 789; // window.b = 789}) (); (function () {alert (this.b); // 789, window.bvar b = 0; waspada (b); // 0, tes semacam itu telah ditulis!}) (); } var f = foo baru (); (function () {alert (this.b); // 789, window.balert (b); // 789, window.b}) ();Anehnya, peringatan terakhir (b) masih menghasilkan 789. // Tidak ada kejutan sama sekali!
// goddamntest5function foo () {(function () {this.b = 789; // window.b = 789}) (); (function () {alert (this.b); // 789, window.balert (b); // tidak ditentukan, var global b = 0; peringatan (b); // 0, ada juga tes seperti itu!}) (); } var f = foo baru (); (function () {alert (this.b); // 789, window.balert (b); // 789, window.b}) ();PS: Metode JS untuk menghapus variabel lokal
alert ('value:'+str+'/ttype:'+typeof (str)) // Sebelum mendeklarasikan variabel, lihat var str = "dd"; peringatan ('nilai:'+str+'/ttype:'+typeof (str)) // Setelah mendeklarasikan dan menetapkan variabel, lihat str = tidak disulingkan; // hapus peringatan variabel lokal ('nilai:'+str+'/ttype:'+typeof (str)) // Setelah membatalkan variabel, lihat str = tidak terdefinisi, sama seperti yang pertamaDi atas adalah analisis terbaru dari variabel global JS dan variabel lokal yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!