Apakah tingkah laku pengangkatan pembolehubah yang diisytiharkan di dalam gelung dalam JavaScript?
Hey! Saya pembekal dalam perniagaan angkat, dan hari ini saya ingin menyelami topik yang sangat menarik dalam JavaScript: tingkah laku angkat pembolehubah yang diisytiharkan dalam gelung.
Mula-mula, mari kita semak apa itu angkat. Dalam JavaScript, angkat ialah mekanisme di mana pengisytiharan pembolehubah dan fungsi dialihkan ke bahagian atas skop kandungannya sebelum kod dilaksanakan. Ia seperti enjin JavaScript mengambil semua pengisytiharan dan "mengangkat" mereka. Jadi, anda boleh menggunakan pembolehubah atau memanggil fungsi sebelum ia benar-benar diisytiharkan dalam kod.
Sekarang, apabila ia datang kepada pembolehubah yang diisytiharkan dalam gelung, perkara menjadi lebih rumit. Mari kita mulakan dengan sekolah lamakamikata kunci.
Mengangkat dengankamidalam Gelung
Apabila anda menggunakankamiuntuk mengisytiharkan pembolehubah di dalam gelung, pembolehubah itu dinaikkan ke bahagian atas fungsi melampirkan atau skop global. Thekamikata kunci tidak mempunyai blok - skop peringkat; ia hanya mempunyai fungsi - peringkat atau skop global.
Lihat contoh mudah ini:
untuk (var i = 0; i < 3; i++) { setTimeout(function () { console.log(i); }, 1000); }
Dalam kod ini, kami mengharapkan untuk melihat0,1, dan2dicetak selepas satu saat. Tetapi apa yang sebenarnya berlaku ialah itu3dicetak tiga kali. kenapa? Nah, kerana mengangkat. Theberada dalampengisytiharan dinaikkan ke bahagian atas skop yang disertakan. Pada masa yangsetTimeoutpanggilan balik dilaksanakan, gelung telah selesai, dan nilaiiialah3.
Panggilan balik dalamsetTimeoutfungsi dekat atas pembolehubah yang samai. Oleh kerana gelung telah menyelesaikan pelaksanaannya, nilai bagiitelah mencapai nilai akhir iaitu3.
Untuk menyelesaikan masalah ini dengankami, kita boleh menggunakan ungkapan fungsi yang dipanggil serta-merta (IIFE). Begini caranya:
untuk (var i = 0; i < 3; i++) { (fungsi (j) { setTimeout(fungsi () { console.log(j); }, 1000); })(i); }
Dalam kod ini, kami mencipta skop baharu untuk setiap lelaran gelung menggunakan IIFE. Nilai semasa bagiidiluluskan sebagai hujahjkepada IIFE, dan setiap panggilan balik dalamsetTimeoutkini ditutup pada pembolehubah yang berbezaj. Jadi, kita mendapat output yang diharapkan daripada0,1, dan2.
Mengangkat denganbiarkandanconstdalam Gelung
ES6 diperkenalkanbiarkandanconst, yang mempunyai skop peringkat blok. Apabila anda menggunakanbiarkanatauconstuntuk mengisytiharkan pembolehubah di dalam gelung, setiap lelaran gelung mendapat contoh pembolehubah tersendiri.
Mari kita tulis semula contoh sebelumnya menggunakanbiarkan:
untuk (biar i = 0; i < 3; i++) { setTimeout(function () { console.log(i); }, 1000); }
Kod ini akan dicetak dengan betul0,1, dan2selepas satu saat. Thebiarkankata kunci mencipta pengikatan baharu untukidalam setiap lelaran gelung. Jadi, setiap panggilan balik dalamsetTimeoutditutup atas contoh yang berbeza daripadai.
Perkara yang sama berlaku untukconst. Jika anda menggunakanconstdi dalam gelung, setiap lelaran juga mendapat contoh sendiri, tetapi anda tidak boleh menetapkan semula nilai sesuatuconstpembolehubah.
untuk (biar i = 0; i < 3; i++) { const j = i * 2; setTimeout(fungsi () { console.log(j); }, 1000); }
Kod ini akan dicetak0,2, dan4selepas satu saat, seperti yang dijangkakan.
Aplikasi Praktikal
Memahami tingkah laku angkat pembolehubah dalam gelung adalah penting untuk menulis kod JavaScript yang betul, terutamanya apabila berurusan dengan operasi tak segerak sepertisetTimeoutatau panggilan AJAX.
Contohnya, dalam senario dunia sebenar, anda mungkin sedang membina aplikasi web yang mengambil data daripada API untuk setiap item dalam senarai. Anda perlu memastikan bahawa setiap panggilan tak segerak mempunyai nilai yang betul untuk item yang berfungsi dengannya.
Katakan anda menggunakan gelung untuk mengulang senarai ID produk dan membuat panggilan API untuk setiap produk. Jika anda tidak mengendalikan pengangkat pembolehubah dengan betul, anda mungkin mendapat semua panggilan API menggunakan ID produk yang sama.
const productIds = [1, 2, 3]; untuk (biar i = 0; i <productIds.length; i++) { const productId = productIds[i]; fetch(`https://api.example.com/products/${productId}`) .then(response => response.json()) .then(data => console.log(data)); }
Dalam kod ini, menggunakanbiarkanmemastikan bahawa setiap panggilan API mempunyai yang betulproductId.
Berkaitan dengan Pengangkatan dalam Perniagaan Kami
Sebagai pembekal angkat, kami berurusan dengan pelbagai jenis peralatan dan mekanisme. Sama seperti bagaimana JavaScript mempunyai peraturan yang berbeza untuk pengangkatan berubah-ubahkami,biarkan, danconst, kami mempunyai peraturan dan amalan terbaik yang berbeza untuk mengangkat dalampembuatan logamindustri.
Apabila ia datang untuk mengangkat struktur logam berat untukLukisan 3D Prafabrik Untuk Bangunan Bertingkat Tinggi Keluli Berstruktur, kita perlu berhati-hati tentang pengagihan beban, sudut angkat, dan kestabilan struktur. Setiap operasi angkat adalah seperti lelaran berasingan dalam gelung; kita perlu memastikan bahawa semua parameter ditetapkan dengan betul untuk setiap operasi.
Begitu juga, untukBangunan Keluli Kediaman Tinggi pra-kejuruteraan, proses angkat adalah kompleks dan memerlukan pemahaman yang mendalam tentang reka bentuk struktur dan keupayaan peralatan angkat kami.


Kesimpulan
Kesimpulannya, tingkah laku angkat pembolehubah yang diisytiharkan dalam gelung dalam JavaScript bergantung pada kata kunci yang digunakan.kamimempunyai fungsi - tahap atau skop global, yang boleh membawa kepada hasil yang tidak dijangka apabila digunakan dalam gelung dengan operasi tak segerak. Sebaliknya,biarkandanconstmempunyai skop peringkat blok, mencipta contoh baharu pembolehubah dalam setiap lelaran gelung.
Jika anda menjalankan perniagaan membina struktur keluli bertingkat tinggi atau mana-mana industri lain yang memerlukan angkat, sama seperti dalam JavaScript, mendapatkan butiran yang betul adalah penting. Sama ada skop pembolehubah yang betul dalam kod atau teknik angkat yang betul untuk peralatan anda, kesilapan kecil boleh membawa kepada masalah besar.
Jika anda berminat dengan perkhidmatan atau produk angkat kami, jangan teragak-agak untuk menghubungi ahubungi untuk membincangkan keperluan perolehan anda. Kami di sini untuk membantu anda dengan semua keperluan angkat anda, sama seperti kami telah cuba menjelaskan sedikit tentang tingkah laku angkat dalam JavaScript untuk anda.
Rujukan
- "JavaScript: The Definitive Guide" oleh David Flanagan
- Dokumentasi JavaScript Rangkaian Pembangun Mozilla (MDN).
