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

Linda Hamilton
Lepaskan: 2024-10-24 18:50:41
asal
889 orang telah melayarinya

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}
Salin selepas log masuk

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'); };
})();
Salin selepas log masuk

Kompilasi: SomeFunction1 ditakrifkan sebagai tidak ditakrifkan.

Pelaksanaan: setTimeout dipanggil dengan nilai undefined someFunction1.

Contoh 2:

(function() {
setTimeout(someFunction2, 10);
function someFunction2() { alert('here2'); }
})();
Salin selepas log masuk

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'); };
})();
Salin selepas log masuk

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'); }
})();
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!