Rumah >hujung hadapan web >tutorial js >Contoh perbezaan antara pengisytiharan pembolehubah dengan var dan tanpa var dalam kemahiran JavaScript_javascript
Artikel ini membincangkan perbezaan antara pengisytiharan pembolehubah dalam JavaScript dengan var dan tanpa var Skop pengisytiharan pembolehubah dalam JS adalah berdasarkan fungsi, jadi kita sering melihat kaedah untuk mengelakkan pencemaran pembolehubah global ialah
.(function(){ // ... })();
Dalam fungsi, pembolehubah yang diisytiharkan dengan var dan tanpa var adalah berbeza. Yang diisytiharkan dengan var ialah pembolehubah tempatan, dan yang tanpa var diisytiharkan pembolehubah global, jadi anda boleh menggunakan ini untuk mendedahkan bahan antara muka kepada dunia luar.
Apabila mengisytiharkan pembolehubah dalam skop global, ia kelihatan sama dengan atau tanpa var keluar.
var fff = 2; window.ffa = 3; ffb = 4; this.ffc = 4; var ffftx = Object.getOwnPropertyDescriptor(window, 'fff'); //configurable:false,enumerable:true,value:2,writable:true var ffatx = Object.getOwnPropertyDescriptor(window, 'ffa'); //configurable:true,enumerable:true,value:2,writable:true var ffbtx = Object.getOwnPropertyDescriptor(window, 'ffb'); //configurable:true,enumerable:true,value:2,writable:true var ffctx = Object.getOwnPropertyDescriptor(window, 'ffc'); //configurable:true,enumerable:true,value:2,writable:true
Melalui perkara di atas, kami mendapati bahawa masih terdapat perbezaan Mari gunakan padam untuk memadamkan atribut untuk mengesahkan bahawa atribut dengan kebolehkonfigurasian palsu tidak boleh dipadamkan. Maksudnya, atribut objek global yang diisytiharkan melalui pembolehubah var tidak boleh dipadamkan. Kami juga akan mendapati bahawa atribut objek global yang dicipta oleh pengisytiharan fungsi tidak boleh dipadamkan.
delete fff; // 无法删除 delete ffa; // 可删除 delete ffb; // 可删除 delete ffc; // 可删除
Kesimpulannya ialah terdapat perbezaan antara mengisytiharkan pembolehubah global dengan var dan tanpa var.
Adalah sah dan tidak berbahaya untuk menggunakan pernyataan var untuk mengulangi pernyataan pengisytiharan. Jika pernyataan diulang dengan tugasan, ia tidak berbeza dengan pernyataan tugasan biasa. Jika anda cuba membaca pembolehubah yang tidak diisytiharkan, JS akan melaporkan ralat.
Dalam skop fungsi JavaScript, pembolehubah yang diisytiharkan atau fungsi dalaman boleh dilihat dalam badan fungsi. Maksudnya, fungsi itu mungkin tersedia sebelum ia ditakrifkan. Terdapat dua cara untuk mentakrifkan fungsi, satu ialah ungkapan definisi fungsi, dan satu lagi ialah pernyataan pengisytiharan fungsi.
// 函数定义表达式 var fns = function (){ // ... }; // 函数声明语句 function fns(){ // ... }
Pernyataan pengisytiharan fungsi "lanjutan" ke bahagian atas skrip luaran atau skop fungsi luaran, jadi fungsi yang diisytiharkan dengan cara ini boleh dipanggil melalui kod yang muncul sebelum ia ditakrifkan. Dalam ungkapan definisi fungsi, pengisytiharan pembolehubah adalah lanjutan, tetapi tugasan kepada pembolehubah tidak lanjutan Oleh itu, fungsi yang ditakrifkan dalam ungkapan tidak boleh dipanggil sebelum fungsi ditakrifkan.
(function() { testa(); // 打印出testa testb(); // 报错:提示undefined is not a function console.log(testc); //undefined,如果移到上面就可以了 function testa() { console.log("testa"); } var testb = function() { console.log("tesb"); } var testc = "testc"; })();
Sudah tentu, apabila kita mengisytiharkan pembolehubah dan fungsi, kita mesti mematuhi spesifikasi asas Pembolehubah dan fungsi mesti diisytiharkan terlebih dahulu.