Dalam JavaScript, pelaksanaan kod melibatkan dua fasa: kompilasi dan penilaian. Contoh pertama gagal kerana salah faham asas antara pengisytiharan fungsi dan ungkapan berkenaan fasa ini.
Pengisytiharan fungsi gunakan kata kunci fungsi dan ikuti sintaks:
function name (arguments) {code}
Ungkapan fungsi, sebaliknya, ditulis dalam konteks ungkapan dan mengikut sintaks yang sama seperti pengisytiharan, kecuali ia dibalut dalam kurungan. Ungkapan diproses semasa pelaksanaan, bukan kompilasi.
Contoh 1:
(function() { setTimeout(someFunction1, 10); var someFunction1 = function() { alert('here1'); }; })();
Kompilasi: SomeFunction1 ditakrifkan sebagai tidak ditakrifkan.
Pelaksanaan: setTimeout dipanggil dengan nilai undefined someFunction1.
Contoh 2:
(function() { setTimeout(someFunction2, 10); function someFunction2() { alert('here2'); } })();
Kompilasi: SomeFunction2 diisytiharkan sebagai fungsi..
Pelaksanaan: setTimeout dipanggil dengan fungsi someFunction2 yang disusun.
Contoh 3:
(function() { setTimeout(function() { someFunction3(); }, 10); var someFunction3 = function() { alert('here3'); }; })();
Kompilasi: SomeFunction3 pada mulanya ditakrifkan sebagai tidak ditentukan.
Pelaksanaan: Fungsi tanpa nama diluluskan untuk setTimeout, membuat penutupan kepada someFunction3. Kemudian, someFunction3 diberikan fungsi, yang mengatasi nilainya yang tidak ditentukan.
Contoh 4:
(function() { setTimeout(function() { someFunction4(); }, 10); function someFunction4() { alert('here4'); } })();
Serupa dengan Contoh 2, someFunction4 diisytiharkan sebelum diserahkan kepada setTimeout.
Contoh pertama gagal kerana sesetengahFunction1 tidak diisytiharkan sebelum dihantar ke setTimeout semasa penyusunan. Ungkapan fungsi mesti dinilai semasa pelaksanaan, selepas pengisytiharan diproses. Oleh itu, susunan ungkapan adalah penting apabila menggunakan ungkapan fungsi, terutamanya apabila dihantar kepada fungsi tak segerak seperti setTimeout.
Atas ialah kandungan terperinci Mengapa Kod JavaScript Saya Gagal Apabila Menggunakan `setTimeout` Dengan Ungkapan Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!