Rumah >hujung hadapan web >tutorial js >Apakah promosi berubah-ubah dalam js? Mengapa ada promosi berubah-ubah?

Apakah promosi berubah-ubah dalam js? Mengapa ada promosi berubah-ubah?

青灯夜游
青灯夜游ke hadapan
2021-08-16 09:51:257550semak imbas

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?

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);

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);

Kemudian mari kita lihat contoh lain:

 console.log(a);
 var a = 2;

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;
Dan js hanya akan mempromosikan ayat var a, jadi pernyataan tadi adalah bersamaan dengan:

 var a;
 console.log(a);
 a = 2;

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(&#39;fn&#39;);
 }
 var fn = 2;
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(&#39;1&#39;);
 }
 function fn () {
     console.log(&#39;2&#39;);
 }
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(&#39;fn&#39;);
 }
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() {};
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!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam