Perintah Pengisytiharan dan Penilaian Fungsi JavaScript
Latar Belakang:
Dalam JavaScript, fungsi boleh diisytiharkan atau dicipta menggunakan ungkapan. Pengisytiharan fungsi berlaku semasa fasa penyusunan, manakala ungkapan fungsi dinilai semasa fasa pelaksanaan. Memahami perbezaan ini adalah penting untuk memahami kelakuan kod JavaScript.
Soalannya:
Mengapakah contoh pertama dalam blok kod berikut gagal, manakala contoh yang selebihnya laksanakan dengan jayanya?
<code class="javascript">// 1 - does not work (function() { setTimeout(someFunction1, 10); var someFunction1 = function() { alert('here1'); }; })(); // ... other examples</code>
Jawapannya:
Kegagalan contoh pertama bukan disebabkan isu skop atau penutupan sebaliknya salah faham antara pengisytiharan dan ungkapan .
Pengisytiharan Fungsi lwn. Ungkapan:
Fasa 1: Penyusunan
Semasa penyusunan, pengkompil memproses pengisytiharan fungsi, mencipta pembolehubah untuk fungsi. Dalam contoh pertama, pembolehubah someFunction1 dicipta tetapi kekal tidak ditentukan kerana nilainya (badan fungsi) dinilai kemudian.
Fasa 2: Pelaksanaan
Contoh 1:
Pada masa jalanan, jurubahasa menemui setTimeout(someFunction1, 10) dan cuba menghantar someFunction1 yang tidak ditentukan kepada setTimeout.
Contoh 2:
Sebaliknya, function someFunction2() ialah pengisytiharan, mencipta fungsi semasa penyusunan. Apabila setTimeout dipanggil, ia menerima rujukan fungsi yang disusun.
Contoh 3:
Di sini, fungsi tanpa nama dihantar ke setTimeout, yang mewujudkan penutupan kepada pembolehubah beberapaFungsi3. Apabila setTimeout dicetuskan, someFunction3 telah diberikan nilai dan fungsi tersebut berjaya dilaksanakan.
Contoh 4:
Serupa dengan Contoh 2, fungsi someFunction4 diisytiharkan, menjadikan rujukannya tersedia untuk setTimeout.
Penjelasan Tambahan:
Atas ialah kandungan terperinci Mengapa Kod JavaScript Ini Gagal, Walaupun Contoh Serupa Berfungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!