Apakah perbezaan antara let dan var dalam es6

青灯夜游
Lepaskan: 2022-04-15 19:42:47
asal
2180 orang telah melayarinya

Perbezaan: 1. biarkan pembolehubah mempunyai skop peringkat blok, manakala pembolehubah var tidak mempunyai skop peringkat blok 2. pembolehubah var mempunyai promosi berubah (tiada kekangan zon mati sementara) dan boleh digunakan dahulu dan kemudian diisytiharkan, manakala pembolehubah Let tidak mempunyai promosi pembolehubah (terdapat kekangan zon mati sementara) dan mesti diisytiharkan sebelum digunakan 3. Biarkan pembolehubah tidak boleh diisytiharkan berulang kali, tetapi pembolehubah var boleh.

Apakah perbezaan antara let dan var dalam es6

Persekitaran pengendalian tutorial ini: sistem Windows 7, ECMAScript versi 6, komputer Dell G3.

ES6 menambah perintah let baharu untuk mengisytiharkan pembolehubah setempat. Penggunaannya adalah serupa dengan var, tetapi pembolehubah yang diisytiharkan hanya sah dalam blok kod tempat perintah let terletak (skop peringkat blok), dan terdapat kekangan zon mati sementara.

Mari kita lihat dahulu varsoalan temuduga peningkatan pembolehubah biasa:

题目1:
var a = 99;            // 全局变量a
f();                   // f是函数,虽然定义在调用的后面,但是函数声明会提升到作用域的顶部。 
console.log(a);        // a=>99,  此时是全局变量的a
function f() {
  console.log(a);      // 当前的a变量是下面变量a声明提升后,默认值undefined
  var a = 10;
  console.log(a);      // a => 10
}

// 输出结果:
undefined
10
99
Salin selepas log masuk

Jika anda menghadapi kesukaran memahami soalan di atas, sila lihat secara sistematik pada JS lanjutan percuma Lao Ma video Tutorial.

ES6 boleh menggunakan let untuk menentukan pembolehubah peringkat blok

Sebelum ES6, kita semua menggunakan var untuk mengisytiharkan pembolehubah, dan JS hanya mempunyai Fungsi skop dan skop global tidak mempunyai skop peringkat blok, jadi {} tidak boleh mengehadkan skop akses pembolehubah yang diisytiharkan oleh var.
Sebagai contoh:

{ 
  var i = 9;
} 
console.log(i);  // 9
Salin selepas log masuk

ES6 baharu let membolehkan anda mengisytiharkan pembolehubah peringkat blok.

{ 
  let i = 9;     // i变量只在 花括号内有效!!!
} 
console.log(i);  // Uncaught ReferenceError: i is not defined
Salin selepas log masuk

mari aplikasi unik dengan gelung for

let sangat sesuai untuk skop peringkat blok di dalam gelung for. Badan gelung for dalam JS adalah istimewa Setiap pelaksanaan ialah skop blok bebas baharu Selepas pembolehubah yang diisytiharkan dengan let dihantar ke dalam skop badan gelung for, mereka tidak akan berubah dan tidak akan terjejas oleh dunia luar. Lihat soalan temu bual biasa:

for (var i = 0; i <10; i++) {  
  setTimeout(function() {  // 同步注册回调函数到 异步的 宏任务队列。
    console.log(i);        // 执行此代码时,同步代码for循环已经执行完成
  }, 0);
}
// 输出结果
10   共10个
// 这里面的知识点: JS的事件循环机制,setTimeout的机制等
Salin selepas log masuk

Jika anda menukar var kepada let pernyataan:

// i虽然在全局作用域声明,但是在for循环体局部作用域中使用的时候,变量会被固定,不受外界干扰。
for (let i = 0; i < 10; i++) { 
  setTimeout(function() {
    console.log(i);    //  i 是循环体内局部作用域,不受外界影响。
  }, 0);
}
// 输出结果:
0  1  2  3  4  5  6  7  8 9
Salin selepas log masuk

biar tiada promosi berubah-ubah dan sementara Tiada promosi pembolehubah untuk pembolehubah yang diisytiharkan dengan dalam zon mati

let. Dan pembolehubah tidak boleh digunakan sehingga pernyataan pengisytiharan let dilaksanakan, jika tidak, ralat Uncaught ReferenceError akan dilaporkan.

Contohnya:

console.log(aicoder);    // 错误:Uncaught ReferenceError ...
let aicoder = &#39;aicoder.com&#39;;
// 这里就可以安全使用aicoder
Salin selepas log masuk

ES6 dengan jelas menetapkan bahawa jika terdapat perintah let dan const dalam blok, pembolehubah yang diisytiharkan oleh blok ini untuk arahan ini dibentuk dari awal Skop tertutup. Sebarang penggunaan pembolehubah ini sebelum pengisytiharan akan mengakibatkan ralat.
Ringkasnya, dalam blok kod, pembolehubah tidak tersedia sehingga ia diisytiharkan menggunakan arahan let. Dari segi tatabahasa, ini dipanggil "zon mati sementara" (TDZ).

biar pembolehubah tidak boleh diisytiharkan berulang kali

biar tidak membenarkan pengisytiharan berulang pembolehubah yang sama dalam skop yang sama. Jika tidak, ralat dilaporkan: Uncaught SyntaxError: Identifier &#39;XXX&#39; has already been declared

Contohnya:

let a = 0;
let a = &#39;sss&#39;;
// Uncaught SyntaxError: Identifier &#39;a&#39; has already been declared
Salin selepas log masuk

Ringkasan

ES6 let allow js untuk benar-benar memiliki skop peringkat Blok juga merupakan laluan yang lebih selamat dan lebih standard Walaupun banyak kekangan ditambah, semuanya direka untuk membolehkan kami menggunakan dan menulis kod dengan lebih selamat.

[Cadangan berkaitan: tutorial video javascript, bahagian hadapan web]

Atas ialah kandungan terperinci Apakah perbezaan antara let dan var dalam es6. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan