JavaScript mempamerkan gelagat unik di mana ia membenarkan anda menggunakan fungsi walaupun sebelum ia ditakrifkan . Fenomena yang kelihatan paradoks ini dikenali sebagai angkat.
Pertimbangkan kod berikut:
<code class="javascript">function fooCheck() { alert(internalFoo()); // We are using internalFoo() here... return internalFoo(); // And here, even though it has not been defined... function internalFoo() { return true; } //...until here! } fooCheck();</code>
Dalam kod ini, fungsi internalFoo() digunakan dua kali dalam fungsi fooCheck(), walaupun takrifnya diletakkan selepas seruan tersebut.
Sebab di sebalik tingkah laku ini terletak pada mekanisme pengangkatan JavaScript. Semasa fasa penyusunan, JavaScript mengangkat pengisytiharan ke bahagian atas skop mereka, yang dalam kes ini ialah skop fungsi fooCheck(). Ini bermakna walaupun fungsi internalFoo() terletak secara fizikal selepas dua panggilan pertamanya, ia dianggap diisytiharkan pada permulaan skop.
Tingkah laku angkat ini khusus untuk pengisytiharan fungsi dan tidak digunakan untuk fungsi ungkapan. Sebagai contoh, jika anda menggantikan pengisytiharan fungsi internalFoo() dengan ungkapan fungsi berikut:
<code class="javascript">var internalFoo = function() { return true; };</code>
kod akan gagal kerana ungkapan fungsi tidak dinaikkan.
Perbezaan antara pengisytiharan fungsi dan ungkapan adalah penting dalam memahami angkat. Pengisytiharan fungsi dinaikkan sebagai penyata, manakala ungkapan fungsi dinilai semasa pelaksanaannya.
Tingkah laku ini didokumenkan dalam standard ECMAScript, bahagian 10.1.3. Pengangkatan membolehkan fleksibiliti dan kecekapan yang lebih tinggi dalam organisasi kod, membolehkan anda menentukan fungsi pada mana-mana titik dalam skop tanpa menjejaskan kebolehcapaiannya. Walau bagaimanapun, adalah penting untuk mengambil kira perbezaan antara pengisytiharan fungsi dan ungkapan untuk mengelakkan akibat yang tidak diingini.
Atas ialah kandungan terperinci Mengapa Anda Boleh Menggunakan Fungsi JavaScript Sebelum Ia Ditakrifkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!