Saya telah membaca mode JavaScript yang ketat berkali -kali, dan beberapa mengatakan "nonaktifkan dengan pernyataan". Di masa lalu, saya melihat ini semua dengan menunggang kuda dan mengawasi bunga, dan lewat, karena saya jarang menggunakan pernyataan ini dalam waktu normal, jadi itu tidak ada hubungannya dengan diri saya sendiri. Hari ini saya tidak bisa membantu tetapi bertanya -tanya mengapa "model ketat" tidak dapat mentolerir pernyataan dengan?
Spesifikasi ecmascript mengatakan bahwa "pernyataan dengan dengan digunakan untuk mengatur ruang lingkup kode dalam objek tertentu". Dapat dilihat bahwa pernyataan dengan mengubah rantai lingkup.
function person (name, use, sex) {this.name = name; this.age = use; this.sex = sex;} (function () {var title = 'pelamar:'; var zhangsan = orang baru ('zhang san', 20, 'laki -laki'); var usia = ''; dengan (zhangsan) {str = title '+judul+'); usia+', dengan (zhangsan) {str = title+name+name+', name+', name+name+name+name+{Zhangsan) {str = title+titor+ posisi '+pekerjaan;} console.log (str);}) ();Kode di atas akan melaporkan ReferenceError yang tidak tertulis: Pekerjaan tidak ditentukan.
Jika di atas dengan blok pernyataan diubah menjadi
str = title+zhangsan.name+', usia'+zhangsan.age+'tahun,'+zhangsan.sex+'sex'+', posisi'+zhangsan.job;
Tidak ada kesalahan, outputnya adalah: Pemohon: Zhang San, 20 tahun, pria, posisi yang tidak ditentukan
Untuk variabel dalam blok pernyataan dengan, saat mengeksekusi, Anda harus memeriksa apakah properti mereka berada di Zhangsan.
Kita tahu bahwa ketika menjalankan skrip, ada dua proses yang dibutuhkan, kompilasi pertama dan kemudian jalankan.
Jelas, saat menyusun, tidak mungkin untuk menentukan sifat apa yang dimiliki objek yang diwakili oleh variabel Zhangsan ini. Hanya dapat ditentukan bahwa Zhangsan adalah contoh orang ketika dieksekusi. Oleh karena itu, tidak dapat benar bahwa variabel dalam blok pernyataan dengan adalah properti Zhangsan atau variabel dalam rantai lingkup variabel sebelumnya selama kompilasi.
Ini bertentangan dengan fakta bahwa variabel didefinisikan ketika menyusun mode ketat, sehingga mode ketat tidak memungkinkan perbedaan ada. Oleh karena itu, tidak sulit untuk memahami bahwa pernyataan dengan dinonaktifkan dalam mode ketat.