1.var可以重復聲明
var a = 12;
var a = 5;
alert(a) //5
2.var無法限制修改
如:PI = 3.1415;
3.var沒有塊級作用域
{
}
像:
if(){
}
for(){
}
這都是塊級作用域,在這里面定義的變量則在塊級域外面是沒法使用的。
4.let和const不能重復聲明
let a =12;
let a=5;
alert(a)//報錯
const a =12;
const a=5;
alert(a)//報錯
5.let是可以重復修改的,但是const是常量,是不能重復修改的。
let a = 12;
a = 5;
alert(a); //5
const a = 12;
a = 5;
alert(a);//報錯
6.塊級作用域
if(true){
let a = 12;
}
alert(a);//報錯,a is not defined
if(true){
const a = 12;
}
alert(a);//報錯,a is not defined
語法快不僅僅是if,for等這些,如下面的也是塊級作用域:
{
let a = 5;
console.log(a) //5
}
console.log(a); //報錯,a is not defined
7.塊級作用域的用法:
現在有三個button,分別點擊,傳統的寫法是:
window.onload = function(){
var aBtn = document.getElementByTagName("input");
for(var i=0;i<aBtn.length;i++){
aBtn[i].onclick = function(){
alert(i)
}
}
}
結果每次彈出的都是3,然后我們采用函數作為塊級作用域的方式在外邊增加一層,如下:
window.onload = function(){
var aBtn = document.getElementByTagName("input");
for(var i=0;i<aBtn.length;i++){
(function(i){
aBtn[i].onclick = function(){
alert(i)
}
})(i)
}
}
雖然問題解決了,但是如果用現在ES6的let,本身就是在塊級作用域中有效,更加方便;
window.onload = function(){
var aBtn = document.getElementByTagName("input");
for(let i=0;i<aBtn.length;i++){
aBtn[i].onclick = function(){
alert(i)
}
}
}
最后總結如下:
|:-😐:-😐:-😐:-😐
名稱 | 重復聲明 | 修改 | 塊級作用域 |
---|---|---|---|
let | 不能重復聲明 | 變量,可以修改 | 塊級作用域 |
const | 不能重復聲明 | 常量,不可以修改 | 塊級作用域 |