var聲明
var varname= 10;
變量值可以沒有,即 var varname,那麼varname預設就是undefined;
var 作用域的了解:js作用域的了解
let聲明
ES6 新增了 let 指令,用來聲明變量。它的用法類似于 var,但是所聲明的變量,隻在 let 指令所在的代碼塊内有效。
1. 變量名不能重複
- let 聲明的變量,變量名不能重複! 而且必須先聲明後使用。
1 var a = 0;
2 let a = 1; // 報錯 --- 辨別符 'a' 已經聲明
3
VM1019:2 Uncaught SyntaxError: Identifier 'a' has already been declared
2. 塊級作用域
- 塊級作用域,相當于局部作用域。在JS中,隻有函數才能創造一個局部作用域,但是在ES6中,隻要是個 { } 都是塊級作用域(局部作用域)。
// 對象:
{
var a = 1;
let b = 2;
}
console.log(a); // a = 1
console.log(b); // 報錯 --- b is not defined
3. let 聲明的變量隻能在目前作用域使用
- js5 中 用 var 在 for 中聲明的變量,可以再外部通路。
- es6中 用 let 在 for 中聲明的變量 ,無法在外部通路。
- 在 js 中,全局變量可以在局部環境下使用,局部變量不能在全局下使用。
- 在 es6 中,let 聲明的變量,全局變量隻能在全局使用,局部變量隻能在局部使用。而且全局聲明的變量與局部聲明的變量沒有任何關系, 變量名都可以一樣。
// 在 js 中函數創造局部環境
for (var i = 0; i < 10; i++) {
var a = i;
}
console.log(i); // 10
console.log(a); // 9
// es6 中 用 let 在 for 中聲明的變量 ,無法在外部通路。
for (let i = 0; i < 10; i++) {
let a = i;
}
console.log(i); // i is not defined
console.log(a); // 沒執行到
4.暫時性死區
在代碼塊内,使用 let 指令聲明變量之前,該變量都是不可用的。這在文法上,稱為“暫時性死區”
{
console.log(a); //undefined。
var a = 1; // 局部作用域
console.log(a);//1
let 聲明的變量 ,必須先聲明再使用,否則報錯;
{
console.log(a); // 報錯 --- 在初始化之前無法通路'a' 應該先聲明後使用。
let a = 1; // 局部作用域
console.log(a);
}
const關鍵字
- 在ES6中用來聲明靜态常量。
- 常量在聲明時,所有字母必須大寫, 必須指派。
- 一旦聲明,常量的值就不能改變。
;
console.log(PI);
PI = 0;
console.log(PI); // 報錯 --- 常量無法修改, 對常數變量的指派。
const ABC;
console.log(ABC); // 報錯 --- 在const聲明中缺少初始化
conset 和let在作用域上一緻;差別是let定義變量,const定義常量;