ES6中var/let/const的區別
let的含義及let與var的區別:
let 宣告的變數只在它所在的程式碼塊有效;
如下:
for (let i = 0; i < 10; i++) {
console.log(i);
}
console.log('aaa');
console.log(i); // i is not defined
上面程式碼中,計數器i只在for迴圈體內有效,在迴圈體外引用就會報錯。如下var程式碼:
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function() {
console.log(i);
}
}
a[6](); // 10
變數i是var宣告的,在全域性範圍內都有效,所以每一次迴圈,新的i值都會覆蓋舊值,導致最後輸出的是最後一輪i的值。
但是如果使用let,宣告的變數僅在塊級作用域內有效,最後輸出的是6. 如下:
var b = [];
for (let j = 0; j < 10; j++) {
b[j] = function() {
console.log(j);
}
}
b[6](); // 6
不存在變數提升
let 不像var 那樣會發生 ‘變數提升’ 現象,因此,變數需要先宣告然後再使用,否則報錯;
// var 的情況
console.log(foo); // undefined
var foo = 2;
// let的情況;
console.log(bar); // 報錯
let bar = 2;
暫時性死區
快級作用域記憶體在let命令,它所宣告的變數就繫結在這個區域,不再受外部影響;如下程式碼:
var tmp = 123;
if (true) {
tmp = 'abc';
let tmp;
console.log(tmp); // tmp is not defined
}
上面程式碼定於全域性變數tmp,但是在快級作用域內let又宣告瞭一個區域性變數tmp,導致繫結了這個快級作用域;因此列印出tmp會報錯。
不允許重複宣告
let 不允許在相同作用域內,重複宣告同一個變數。如下程式碼排錯
function a() {
let a = 10;
var a = 1;
console.log(a);
}
a();
function a() {
let a1 = 10;
let a1 = 1;
console.log(a1);
}
a();
也不能在函式內部重新宣告引數。
function func1(arg) {
let arg; // 報錯
}
function func2(arg) {
{
let arg; // 不報錯
}
}
ES6的塊級作用域
function f1() {
let n = 5;
if (true) {
let n = 10;
}
console.log(n); // 5
}
f1()
上面的程式碼有2個程式碼塊,都宣告瞭變數n,執行後輸出5,說明了外層程式碼塊不受內層程式碼塊的影響,如果使用了變數var,那麼輸出的就是10;
const命令
const 宣告一個只讀的常量,一旦宣告,常量的值就不允許改變。
如下程式碼:
const a = 1;
a = 2;
console.log(a); //報錯
也就是說 const 一旦宣告瞭變數,就必須初始化,不能留到以後賦值。如果使用const宣告一個變數,但是不賦值,也會報錯;如下程式碼:
const aa; // 報錯
const的作用域與let命令相同;只在宣告所在的塊級作用域內有效。
if (true) {
const aa = 1;
}
console.log(aa); // 報錯
不可重複宣告 (和let一樣)
var message = "Hello!";
let age = 25;
// 以下兩行都會報錯
const message = "Goodbye!";
const age = 30;
但是對於複合型別的變數,比如陣列,儲存的是一個地址,不可改變的是這個地址,即不能把一個地址指向另一個地址,但是物件本身是可變的,比如可以給它新增新的屬性;如下程式碼:
const a33 = [];
a33.push('Hello'); // 可執行
a33.length = 0; // 可執行
a33 = ['55'] // 報錯
相關文章
- ES6中var,let,const的區別
- ES6中let和var和const的區別
- es6 let const與var 的區別
- JavaScript中let、const、var 的區別JavaScript
- let const var 區別
- var let const區別
- let,const,var區別
- var、const、let 的區別
- JavaScript中的var、let 及 const 區別JavaScript
- JS中const、var 和let的區別JS
- 【ES6】var、let、const三者的區別
- var與ES6中const、let宣告的變數的區別變數
- var、let和const的區別
- var和let/const的區別
- ES5 和 ES6:let const var 區別
- 深入理解ES6之var,let,const區別
- ES6中的let與var的區別
- JavaScript 高階—— ES6新增語法 const(let const var區別)JavaScript
- var、let、const宣告變數的區別變數
- JavaScript 中的 Var,Let 和 Const 有什麼區別JavaScript
- 【前端面試】(四)JavaScript var let const的區別前端面試JavaScript
- js中 let 與 var 的區別JS
- var、let、const變數宣告的區別及特點變數
- var、let和const三者有哪些區別?
- ES6 let和var的區別是什麼?
- var 和 let 的區別
- let與var的區別
- js中var和let的快速區別JS
- 1分鐘帶你瞭解var let 和 const 的區別
- 關於es6 let var const 以及Symbol的總結Symbol
- 變數和函式宣告提升,let和var const區別變數函式
- TypeScript let與var的區別TypeScript
- let與const區別
- 淺談let和var的區別
- 教你理解let和var的區別
- var、let和const的知識點
- var與let宣告變數的區別變數
- var,let和const深入解析(一)