Perbezaan: Terdapat hanya dua jenis skop dalam es5: skop global dan skop fungsi, manakala terdapat tiga jenis skop dalam es6: skop global, skop fungsi dan skop peringkat blok, dengan yang baharu ditambah Skop peringkat blok. Peranan skop peringkat blok: Ia boleh menyelesaikan masalah pembolehubah luar yang ditimpa disebabkan oleh promosi pembolehubah skop dalaman, dan menghalang pembolehubah yang digunakan untuk pengiraan gelung daripada bocor ke dalam pembolehubah global.
Persekitaran pengendalian tutorial ini: sistem windows7, ECMAScript versi 6, komputer Dell G3
Skop es5 dan es6 Perbezaan:
Hanya terdapat dua jenis skop dalam es5: skop global dan skop fungsi
Skop dalam es6 Terdapat tiga jenis: skop global, skop fungsi dan skop peringkat blok
ES5 Gunakan var untuk isytiharkan pembolehubah. Pembolehubah yang diisytiharkan dengan var mungkin wujud dalam skop global atau dalam skop tempatan adalah seperti berikut
1 Tiga kes mempunyai skop global
a. Pembolehubah yang diisytiharkan di luar fungsi mempunyai skop global
b c. Sifat objek tetingkap mempunyai skop global2. Skop setempat (skop fungsi)
Skop pembolehubah dalam badan fungsi
Pembolehubah yang ditakrifkan dalam fungsi hanya boleh diakses dalam fungsi
Contoh
Skop peringkat blok baharu dalam Es6
var a = 1; console.log(a);// 1 此处a为全局变量,在全局作用域下都可访问得到 b = 2 console.log(b); // 2 此处b未被var定义,而是被直接赋值,自动声明为全局变量 function fun() { var c = 3; console.log(c);//3 此处c存在在函数作用域中,仅在函数fun中可访问 } fun() console.log(c);// undefined 全局作用域下访问函数作用域中的变量c,得到undefined
Mengapa skop peringkat blok diperlukan?
1 Selesaikan masalah bahawa promosi pembolehubah skop dalaman menyebabkan pembolehubah luar ditimpa
Hasil pelaksanaan
var i = 5; function fun(){ console.log(i);//undefined if(true){ var i = 6 console.log(i);//6 } } fun()
Apabila i yang pertama adalah Semasa mencetak , i hanya diisytiharkan tetapi tidak diberikan (i diberikan nilai 6 dalam pernyataan if), jadi i yang dicetak pertama tidak ditentukan, dan cetakan i kedua ialah 6
var i = 5; function fun(){ var i; console.log(i); if(true){ i = 6 console.log(i) } } fun()
var i = 5; function fun(){ console.log(i);//5 if(true){ let i = 6 console.log(i);//6 } } fun()
Kod di atas mengisytiharkan pembolehubah i dengan var untuk gelung, keadaan ideal Perkara berikut i seharusnya hanya sah dalam badan gelung, tetapi i di sini didedahkan dalam skop global, jadi nilai i masih boleh diakses dalam skop global selepas gelung berakhir
for(var i = 0; i < 3; i++){ doSomething() } console.log(i)//3
for(let i = 0; i < 3; i++){ console.log(i) } console.log(i)//undefined
1 Pembolehubah yang diisytiharkan oleh let hanya sah dalam skop (pada masa ini dalam kurungan kerinting), jadi Sebarang sarang. dibenarkan, dan setiap tahap adalah skop yang berasingan 2 Skop dalam boleh mempunyai nama yang sama dengan pembolehubah skop luar (tiada skop digunakan tanpa mengganggu antara satu sama lain)
3. let Hanya boleh wujud pada tahap atas skop semasa,Nota: dalam { } in if pernyataan dan untuk pernyataan, jika terdapat pembolehubah/pemalar yang diisytiharkan oleh let atau const, skop { } juga tergolong kepada skop blok
Contoh tentang skop[Cadangan berkaitan:
tutorial video javascript
bahagian hadapan web
]<script type="text/javascript"> { var a = 1; console.log(a); // 1 } console.log(a); // 1 // 可见,通过var定义的变量可以跨块作用域访问到。 (function A() { var b = 2; console.log(b); // 2 })(); // console.log(b); // 报错, // 可见,通过var定义的变量不能跨函数作用域访问到 if(true) { var c = 3; } console.log(c); // 3 for(var i = 0; i < 4; i++) { var d = 5; }; console.log(i); // 4 (循环结束i已经是4,所以此处i为4) console.log(d); // 5 // if语句和for语句中用var定义的变量可以在外面访问到, // 可见,if语句和for语句属于块作用域,不属于函数作用域。 { var a = 1; let b = 2; const c = 3; { console.log(a); // 1 子作用域可以访问到父作用域的变量 console.log(b); // 2 子作用域可以访问到父作用域的变量 console.log(c); // 3 子作用域可以访问到父作用域的变量 var aa = 11; let bb = 22; const cc = 33; } console.log(aa); // 11 // 可以跨块访问到子 块作用域 的变量 // console.log(bb); // 报错 bb is not defined // console.log(cc); // 报错 cc is not defined } </script>
Atas ialah kandungan terperinci Apakah perbezaan antara skop es5 dan es6. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!