Rumah  >  Artikel  >  hujung hadapan web  >  Apakah perbezaan antara skop es5 dan es6

Apakah perbezaan antara skop es5 dan es6

青灯夜游
青灯夜游asal
2022-04-11 14:56:532621semak imbas

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.

Apakah perbezaan antara skop es5 dan es6

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

Hanya terdapat skop global dan skop fungsi dalam Es5

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 global



2. 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

Skop peringkat blok boleh difahami secara ringkas sebagai: kandungan yang disertakan dalam kurungan kerinting {}, Ia boleh menjadi skopnya sendiri. Pembolehubah dalam skop peringkat blok diisytiharkan oleh let dan const

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()
Pembolehubah i dalam keseronokan fungsi diisytiharkan menggunakan var Ini melibatkan isu promosi pembolehubah Yang dipanggil promosi pembolehubah bermaksud pengisytiharan fungsi dan pengisytiharan pembolehubah sentiasa "dinaikkan pangkat" ke bahagian atas. badan kaedah oleh jurubahasa. Jadi i di sini adalah bersamaan dengan mencapai bahagian atas fungsi fun terlebih dahulu, tetapi tugasan masih dilakukan apabila i = 6. Kod di atas sebenarnya bersamaan dengan:


Apakah perbezaan antara skop es5 dan es6Apabila 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()
Jika anda menggunakan let untuk mengisytiharkan pembolehubah i dalam jika, pendakap kerinting { } di mana pernyataan if terletak akan membentuk skop peringkat blok, dan pembolehubah yang diisytiharkan dalam skop ini akan "terikat" di kawasan ini, dan tidak akan Ia terus terjejas oleh pengaruh luaran (iaitu zon mati sementara), jadi keluaran i pertama apabila melaksanakan fungsi keseronokan ialah var i=5 dalam skop global, dan output i dalam pernyataan if dibiarkan i diisytiharkan dalam skop peringkat blok =6

var i = 5;
function fun(){
  console.log(i);//5
  if(true){
    let i = 6
    console.log(i);//6
  }
}
fun()
2. Halang pembolehubah yang digunakan untuk pengiraan gelung daripada bocor ke dalam pembolehubah global

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
Untuk contoh Gunakan let dengan skop peringkat blok untuk mengisytiharkan i Pembolehubah i yang diisytiharkan di sini hanya sah dalam kurungan kerinting untuk gelung { }. >

Ciri skop peringkat blok
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!

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