Pernyataan "dengan" Kontroversi: Bolehkah Ia Digunakan untuk Kebaikan?
Kenyataan Alan Storm mengenai kenyataan "dengan" mencetuskan rasa ingin tahu dalam diri kita. Walaupun utilitinya jarang diterokai, potensi perangkapnya masih tidak jelas. Kami menyelidiki penggunaannya dan menemui beberapa aplikasi yang sah sambil mengenepikan risikonya.
Di mana Pernyataan "dengan" Bersinar
Satu penggunaan ketara pernyataan "dengan" ialah untuk menentukan pembolehubah dalam skop blok. JavaScript tidak mempunyai pembolehubah berskop blok, menjadikannya terdedah kepada isu skop dalam gelung dan penutupan.
Untuk Gelung dan Pernyataan "dengan"
Pertimbangkan kod berikut:
for (var i = 0; i < 3; ++i) { setTimeout(function() { alert(num); }, 10); }
Kod ini bertujuan untuk memaparkan pembilang gelung "i" secara tidak segerak. Walau bagaimanapun, ia gagal kerana JavaScript tidak memperkenalkan skop baharu untuk setiap lelaran dan pembolehubah "num" dikongsi antara ketiga-tiga penutupan.
Simulasi Skop Blok dengan "dengan"
Sehingga ES6 tersedia secara meluas, pernyataan "dengan" boleh digunakan untuk mensimulasikan blok skop:
for (var i = 0; i < 3; ++i) { with ({num: i}) { setTimeout(function() { alert(num); }, 10); } }
Kod ini mencipta objek berasingan dengan sifat "num" untuk setiap lelaran, dengan berkesan mengasingkan pembolehubah dalam skop blok.
Kegunaan Lain bagi "dengan"
Selain mensimulasikan skop blok, pernyataan "dengan" juga boleh digunakan untuk:
Mengakses sifat objek dengan mudah:
with (object) { property = value; }
Lelaran melalui objek sifat:
with (object) { for (property in this) { // Do something with the property } }
Perangkap yang Perlu Dielakkan
Walaupun pernyataan "dengan" boleh berguna, ia datang dengan kemungkinan perangkap :
Kesimpulan
Pernyataan "dengan" boleh menjadi alat yang berguna dalam senario tertentu, seperti mensimulasikan skop blok dan mengakses sifat objek dengan mudah. Walau bagaimanapun, potensi kelemahannya harus dipertimbangkan dengan teliti sebelum menggunakannya dalam kod anda.
Atas ialah kandungan terperinci Adakah Pernyataan \'dengan\' Alat Berguna atau Sumber Masalah dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!