Rumah  >  Artikel  >  hujung hadapan web  >  Sebab mengapa mod ketat JavaScript melumpuhkan petua With statement_javascript

Sebab mengapa mod ketat JavaScript melumpuhkan petua With statement_javascript

WBOY
WBOYasal
2016-05-16 16:33:191561semak imbas

Saya telah membaca mod ketat JavaScript berkali-kali, dan salah seorang daripada mereka mengatakan "lumpuhkan pernyataan Dengan". tetapi lumpuhkannya untuk diri saya sendiri. Hari ini saya tidak dapat membantu tetapi tertanya-tanya mengapa "mod ketat" tidak dapat menampung pernyataan dengan?

Spesifikasi EcmaScript mengatakan bahawa "penyataan with digunakan untuk menetapkan skop kod dalam objek tertentu Ia boleh dilihat bahawa pernyataan With mengubah rantai skop."

function Person(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
}
(function(){
var title = '申请人:';
var zhangsan = new Person('张三',20,'男');
var str = '';
with(zhangsan){
str = title+name+',年龄'+age+'岁,'+sex+'性'+',职位'+job;
}
console.log(str);
})();

Kod di atas akan melaporkan Uncaught ReferenceError: kerja tidak ditentukan.

Jika anda menukar perkara di atas dengan blok pernyataan kepada

str = tajuk zhangsan.name ', umur' zhangsan.age 'years,' zhangsan.sex 'jantina' ', jawatan' zhangsan.job;

Tiada ralat dilaporkan dan str keluaran ialah: Pemohon: Zhang San, umur 20, lelaki, jawatan tidak ditentukan

Untuk pembolehubah dalam blok pernyataan with, semasa melaksanakan, semak sama ada atributnya berada dalam zhangsan.

Kami tahu bahawa apabila menjalankan skrip, dua proses diperlukan, kompilasi pertama dan kemudian pelaksanaan.
Jelas sekali pada masa penyusunan, tidak mungkin untuk menentukan atribut apa yang dimiliki oleh objek yang diwakili oleh pembolehubah zhangsan. Ia hanya boleh ditentukan pada masa pelaksanaan bahawa zhangsan ialah contoh Orang. Oleh itu, adalah mustahil untuk mengesahkan pada masa penyusunan sama ada pembolehubah dalam blok pernyataan dengan adalah atribut zhangsan atau pembolehubah dalam rantaian skop pembolehubah peringkat atas.

Ini bercanggah dengan mod ketat, yang menyemak sama ada pembolehubah ditakrifkan pada masa penyusunan, jadi mod ketat tidak akan membenarkan perbezaan wujud, jadi tidak sukar untuk memahami bahawa mod ketat melumpuhkan pernyataan Dengan.

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