1.變量和常量關鍵詞
1.1 let 關鍵詞
- 有塊級作用域 (防止變量污染):一對大括號就是一個程序塊,在大括號之中聲明的變量,出了大括號就不能用了
for (let i = 1; i <= 5; i++) {
console.log(i); // 1 2 3 4 5
}
console.log(i); // 報錯 i is not defined
- 沒有變量提升 (保證程序的邏輯通暢)
console.log(a); //undefined
var a = 10;
console.log(b); //Cannot access 'b' before initialization
let b = 10;
- 不能重復聲明變量 (保證變量唯一性)
let a = 20;
let a = "nihao";
console.log(a);//報錯: Identifier 'a' has already been declared
- 暫時性死區(qū)(塊級作用域內部聲明的變量如果和外部聲明的變量重名,不會沖突)
//雖然在一個頁面中聲明了兩個同名的變量,但是處于不同的作用域內,所以不會產生報錯
let a = 10;
{
let a = 'abc';
console.log(a); //正常輸出abc
}
console.log(a); //正常輸出10
1.2 let 塊級作用域
<button>btn1</button>
<button>btn2</button>
<button>btn3</button>
<script>
var btns = document.querySelectorAll("button");
//使用var聲明i, 則i是全局變量; 循環(huán)完成后 i 的值為 3
for (var i = 0; i < btns.length; i++) {
btns[i].onclick = function() {
console.log(i); //此時點擊任意按鈕,輸出的內容都是3
};
}
//使用let聲明的 i 是有塊級作用域的,即每進行一次循環(huán),都在內存中開辟一塊獨立的空間來保存當前 i 的值
for (let i = 0; i < btns.length; i++) {
btns[i].onclick = function() {
console.log(i);
};
}
</script>
1.3 const 常量
一旦賦值就不能改變的量就是常量, 常量也有塊級作用域
特點:
- 也有塊級作用域
//用塊級作用域
{
const PI = 3.14;
console.log(PI);
}
console.log(PI); //報錯: PI is not defined
- 必須要初始化值
//必須初始化
const PI; //報錯: Missing initializer in const declaration
- 復雜數(shù)據類型可以更改內部值
const obj = {
name: 'zs',
age : 20,
say : function () {
console.log('ok');
}
}
// obj = {}; //報錯
obj.name = 'ls';
obj.say = function () {
console.log('okok');
}
var、let 和 const的區(qū)別
- var和let都能聲明變量,但是let更嚴謹一些,以后都推薦使用let來聲明變量。
- let的特殊點: 不能提升變量(保證程序的邏輯通暢)、 有塊級作用域(避免變量交叉污染)、不能重復聲明保證變量的唯一性,塊級作用域會暫時性死區(qū)
- const用來聲明常量,常量是不能改變的量,常量也有塊級作用域,初始化常量時必須賦值
- 能用const就用const (因為cosnt速度更快)