Analisis ringkas kemahiran deklarasi_javascript pembolehubah JavaScript

WBOY
Lepaskan: 2016-05-16 15:24:13
asal
1261 orang telah melayarinya

Tidak kira di mana pernyataan pengisytiharan pembolehubah JavaScript muncul, ia akan dilaksanakan terlebih dahulu sebelum kod lain. Skop pembolehubah yang diisytiharkan menggunakan kata kunci var ialah konteks pelaksanaan semasa, yang mungkin merupakan fungsi sekeliling, atau, apabila pembolehubah diisytiharkan di luar badan fungsi, ia adalah pembolehubah global.

Perkara yang ditakrifkan di luar badan fungsi ialah pembolehubah global dan yang ditakrifkan di dalam badan fungsi ialah pembolehubah tempatan. Takrifan di sini merujuk kepada pengisytiharan melalui var.

JavaScript mempunyai konsep global tersirat, yang bermaksud bahawa mana-mana pembolehubah yang anda tidak isytiharkan akan menjadi sifat objek global. Contohnya:

function test(){
myname = "huming";
alert(myname);
}
test();  // "huming"
alert(myname);  //"huming" 
Salin selepas log masuk

Kedua-dua keputusan adalah sama, menunjukkan bahawa nama saya ialah pembolehubah global.

Jadi, adakah terdapat perbezaan antara pembolehubah global tersirat dan pembolehubah global yang ditakrifkan secara eksplisit? . Jawapannya pasti ya, lihat contoh di bawah:

// 定义三个全局变量
var global_test = ;
global_test = ; // 反面教材
(function () {
global_test = ; // 反面教材
}());
// 试图删除
delete global_test; // false
delete global_test; // true
delete global_test; // true
// 测试该删除
alert(typeof global_test); // "number"
alert(typeof global_test); // "undefined"
alert(typeof global_test); // "undefined" 
Salin selepas log masuk

Seperti yang dapat dilihat daripada contoh di atas: global_test1 yang ditakrifkan oleh var di luar fungsi tidak boleh dipadamkan, dan global_test2 dan global_test3 yang tidak ditakrifkan oleh var akan dipadamkan (tidak kira sama ada ia dicipta dalam badan fungsi).

Ringkasnya, pembolehubah global yang diisytiharkan melalui var di luar fungsi tidak boleh dipadamkan, tetapi pembolehubah global tersirat boleh dipadamkan.

Perlu diingatkan di sini: JavaScript mempunyai gelagat yang dipanggil "mengangkat" (menggantung/penghuraian atas/pra-penghuraian).

Mari kita ilustrasikan dengan contoh:

var myname = "huming"; //声明全局变量
function test() {
alert(myname);
var myname = "local_huming";
alert(myname);
}
test();
Salin selepas log masuk

Adakah anda fikir kandungan kedua-dua makluman itu konsisten? ? Jelas sekali tidak konsisten, tidak perlu dikatakan konsisten. . Output sebenar ialah: "undefined", "local_huming".

Contoh di atas adalah bersamaan dengan

var myname = "huming"; //声明全局变量
function test() {
  var myname;
  alert(maname);<br>  myname = "local_huming";
  alert(myname); // "local"
}
test(); 
Salin selepas log masuk

Output myname oleh makluman pertama bukanlah pembolehubah global yang anda fikirkan, tetapi pembolehubah tempatan dalam skop yang sama (badan fungsi) dengannya. Walaupun ia tidak diisytiharkan, ia dianggap sedemikian. Ini dipanggil "angkat angkat".

Ini sepatutnya menjelaskannya. Apabila anda menggunakan pembolehubah dalam badan fungsi dan mengisytiharkannya semula kemudian, ralat mungkin berlaku.

Spesifikasi penulisan:

function test() {
var a = ,
b = ,
c = a + b,
d = {},
e,
f;
// function body...
}
Salin selepas log masuk

Faedahnya ialah:

1. Semua pembolehubah tempatan ditakrifkan pada permulaan fungsi untuk carian mudah;

2. Cegah ralat logik apabila pembolehubah digunakan sebelum ia ditakrifkan.

Dalam JavaScript, terdapat empat cara untuk nama pembolehubah memasuki skop

Bahasa terbina dalam, semua skop mempunyai kata kunci ini dan hujah


Parameter formal, parameter fungsi adalah sah dalam keseluruhan skop


Pengisytiharan fungsi


Pengisytiharan boleh ubah

Empat pesanan yang disenaraikan di atas juga merupakan susunan keutamaan dari tinggi ke rendah Setelah nama pembolehubah telah diisytiharkan, ia tidak boleh ditimpa oleh borang pengisytiharan pembolehubah keutamaan yang lebih rendah.

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan