Apakah itu promosi berubah-ubah dalam JavaScript? Artikel ini akan membawa anda melalui promosi berubah-ubah dalam js dan memperkenalkan sebab terdapat promosi berubah-ubah.
![Apakah promosi berubah-ubah dalam js? Mengapa ada promosi berubah-ubah?](https://img.php.cn/upload/article/000/000/024/6119c370f006d419.jpg)
promosi pembolehubah js
JavaScript ialah bahasa satu utas, jadi pelaksanaan mestilah teratur. Tetapi ia tidak dianalisis dan dilaksanakan baris demi baris, tetapi dianalisis dan dilaksanakan sekeping demi sekeping Fasa penyusunan akan dilakukan terlebih dahulu dan kemudian fasa pelaksanaan. Semasa fasa penyusunan, beberapa milisaat sebelum kod sebenarnya dilaksanakan, semua pembolehubah dan pengisytiharan fungsi dikesan dan ditambah pada ingatan dalam struktur data JavaScript yang dipanggil Persekitaran Leksikal. Jadi pembolehubah dan fungsi ini boleh digunakan sebelum ia benar-benar diisytiharkan.
Mari kita mulakan dengan contoh mudah:
a = 2;
var a;
console.log(a);
Salin selepas log masuk
Apakah yang akan dikeluarkan oleh kod di atas Jika kod ini dilaksanakan dari atas ke bawah, ia pasti akan dikeluarkan tanpa definisi bukan bahasa yang dilaksanakan dari atas ke bawah.
Output kod ini ialah 2, adakah ia tidak dijangka? Jadi, mengapa ini berlaku? Perkara utama terletak pada--Promosi boleh ubah. Ia akan menaikkan pengisytiharan semua pembolehubah dalam skop semasa ke bahagian atas program Oleh itu, kod di atas adalah bersamaan dengan kod berikut.
var a;
a = 2;
console.log(a);
Salin selepas log masuk
Kemudian mari kita lihat contoh lain:
console.log(a);
var a = 2;
Salin selepas log masuk
Apakah yang akan dikeluarkan oleh kod ini? Output 2?
Malah, kod ini akan mengeluarkan undefined. kenapa ni? Seperti yang baru saya katakan, JavaScript akan mempromosikan pengisytiharan pembolehubah ke bahagian atas, tetapi pernyataan tugasan tidak akan dinaikkan pangkat Untuk js, var a = 2 dibahagikan kepada penghuraian dua langkah :
<. 🎜>
var a;
a = 2;
Salin selepas log masuk
Dan js hanya akan mempromosikan ayat var a, jadi pernyataan tadi adalah bersamaan dengan:
var a;
console.log(a);
a = 2;
Salin selepas log masuk
Jadi, mengapakah terdapat promosi berubah-ubah?
Mengapa fenomena promosi berubah-ubah berlaku?
Kerana js, seperti bahasa lain, perlu melalui peringkat kompilasi dan pelaksanaan. Apabila js berada dalam peringkat penyusunan, ia akan mengumpulkan semua pengisytiharan pembolehubah dan mengisytiharkan pembolehubah terlebih dahulu, dan penyataan lain tidak akan mengubah susunannya Oleh itu, semasa peringkat penyusunan, langkah pertama telah dilaksanakan, dan yang kedua Bahagian itu dilaksanakan. hanya apabila pernyataan itu dilaksanakan dalam fasa pelaksanaan.
Pengisytiharan pembolehubah
Pengisytiharan pembolehubah js boleh dibahagikan secara kasar kepada tiga jenis: pengisytiharan var, pengisytiharan let dan const dan pengisytiharan fungsi.
Apabila pengisytiharan fungsi muncul bersama dengan pengisytiharan lain, beberapa konflik mungkin berlaku. Mari lihat ke bawah:
fn();
function fn () {
console.log('fn');
}
var fn = 2;
Salin selepas log masuk
Apa yang anda fikir akan dihasilkan? Adakah saya akan mendapat ralat jika saya menulis ini?
Malah, hasil keluaran ialah fn. Ini menerangkan soalan yang baru kami tanya, apabila pengisytiharan fungsi muncul bersama-sama dengan pengisytiharan lain, siapa yang diutamakan? Jawapannya ialah,
pengisytiharan fungsi adalah di atas segalanya, lagipun, fungsi adalah bangsawan js .
Apa yang perlu dilakukan dengan begitu banyak pengisytiharan fungsi?
fn();
function fn () {
console.log('1');
}
function fn () {
console.log('2');
}
Salin selepas log masuk
Hasil keluaran kod di atas ialah 2. Ini kerana apabila
mempunyai berbilang pengisytiharan fungsi, pengisytiharan fungsi terakhir menggantikan sebelumnya.
Ada satu contoh terakhir:
fn();
var fn = function () {
console.log('fn');
}
Salin selepas log masuk
Selepas pemahaman di atas, adakah ini sangat mudah? Ini adalah sama seperti contoh kedua Format var fn = function() {} ini dipanggil ungkapan fungsi.
Ia sebenarnya terbahagi kepada dua bahagian:
var fn;
fn = function() {};
Salin selepas log masuk
Merujuk kepada Contoh 2, kita boleh tahu bahawa keputusan ini sepatutnya ralat (kerana fn diisytiharkan tetapi tidak ditetapkan, jadi fn tidak ditentukan).
Ringkasan
Jadi, mari kita ringkaskan.
- js akan menaikkan pengisytiharan pembolehubah ke bahagian atas js untuk pelaksanaan Untuk pernyataan seperti var a = 2, ia akan dipecahkan dan var a step akan dinaikkan pangkat.
- Intipati promosi pembolehubah ialah enjin js mengisytiharkan semua pembolehubah semasa menyusun, jadi apabila melaksanakan, semua pembolehubah telah diisytiharkan.
- Apabila terdapat berbilang pembolehubah dengan nama yang sama, pengisytiharan fungsi akan menimpa pengisytiharan lain. Jika terdapat berbilang pengisytiharan fungsi, pengisytiharan fungsi terakhir mengatasi semua pengisytiharan sebelumnya.
Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati:
Pengenalan kepada Pengaturcaraan! !
Atas ialah kandungan terperinci Apakah promosi berubah-ubah dalam js? Mengapa ada promosi berubah-ubah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!