var | let | const | |
重新定义 | √ | × | × |
重新赋值 | √ | √ | × |
var:只有全局作用域和函数作用域概念,没有块级作用域的概念。
let:只有块级作用域的概念 ,由 { } 包括起来,if语句和for语句里面的{ }也属于块级作用域。
如下,在代码块{}里面定义的var变量就是全局变量
for(let i = 0 ;i<1;i++){
let letA = 1;
var varA = 1;
}
// console.log(letA); //报错
console.log(varA); // 1
再如下:
- 对于varA来说,作用域是函数A内部
- 对于letA来说,作用域是function A(){}的花括号之间的代码块,虽然二者一样,但是概念上不同。
function A(){
let letA = 1;
var varA = 1;
this.aaa = function(){
console.log(letA , varA) // 1 1
}
}
new A().aaa();
console.log(varA); // not define
再再如下:
这个outerLetA没有在{}中间,那作用域就是<script></script>之间,相当于全局变量了
<script>
let outerLetA = 111;
function A(){
this.aaa = function(){
console.log(outerLetA); //111
}
}
new A().aaa();
</script>