Rumah  >  Artikel  >  hujung hadapan web  >  Mengapa Kod JavaScript Saya Gagal Apabila Menggunakan `setTimeout` Dengan Ungkapan Fungsi?

Mengapa Kod JavaScript Saya Gagal Apabila Menggunakan `setTimeout` Dengan Ungkapan Fungsi?

Linda Hamilton
Linda Hamiltonasal
2024-10-24 18:50:41890semak imbas

Why Does My JavaScript Code Fail When Using `setTimeout` With Function Expressions?

Perintah Pengisytiharan dan Penilaian Fungsi JavaScript

Mengapa Contoh Pertama Gagal?

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 lwn. Ungkapan

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.

Analisis Kes

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.

Ringkasan

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn