const关键字
const声明的变量必须直接初始化且不允许二次赋值,如下代码:
1,必须直接初始化,下边代码报错
<script>
const name;
name="tom"
console.log(name);
</script>
2,不允许二次赋值,下边代码报错
<script>
const name="tom"; //定义常量,不可以二次赋值。
console.log(name); //输出tom
name="tim";
console.log(name);
</script>
let关键字
和var一样,let也用于声明变量,可以不用直接初始化,可以二次赋值。
例:
<script>
let name;
name="tom";
console.log(name);
name="tim";
console.log(name);
</script>
下边看如下几个异同点:
a、全局作用域:let声明的变量不会作为全局对象window的属性,而var声明的变量则可以
<script>
var name="tom";
console.log(name);
console.log(window.name); //tom:因为var定义的变量在window中。
let age=22;
console.log(age);
console.log(window.age);
</script>
b、函数作用域:和var一样,都用于声明变量,此时两者没有区别:
<script>
function test(){
//定义为局部时。
var nam="tom";
console.log(window.nam);
console.log(nam);
let age=22;
console.log(window.age);
console.log(age);
}
test();
</script>
c、语句块作用域:let声明的变量只能用于语句块作用域内,而var声明的变量还可以在语句块作用域外使用。
<script>
if(true){
var name="tom";
console.log(name); //两个都可以得到值。
}
console.log(name);
</script>
<script>
if(true){
let name="tom";
console.log(name); //输出tom
}
console.log(name); //不输出
</script>
d、重复声明:let不能重复声明变量,var则可以。
<script>
let name="tom";
console.log(name);
let name="tom";
console.log(name);
</script>
<script>
var name="tom";
console.log(name);
var name="tom";
console.log(name); //两个都会输出tom
</script>