const,let,var都可以用来声明变量
const关键字
const声明的变量必须直接初始化且不允许二次赋值,如下代码:
<script type="text/javascript">
const name="Tom";
console.log(name);
name="Tim";//报错:TypeError: invalid assignment to const `name'
console.log(name);
</script>
报错:TypeError: invalid assignment to const `name’
let关键字
和var一样,let也用于声明变量,那么var声明的变量和let声明的变量有何不同:
a、全局作用域:
let声明的变量不会作为全局对象window的属性,而var声明的变量则可以,如下代码:
<script>
let address="河南省郑州市高新区";
console.log(address);
console.log("0");
console.log(window.address);//undefined
var add="河南省郑州市高新区";
console.log(add);
console.log("0");
console.log(window.add);
</script>
输出
函数作用域
和var一样,都用于声明变量,此时两者没有区别
代码示例
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
function t(){
var nameN="tom";
console.log(window.nameN);
console.log(nameN)
console.log("0");
let age=12;
console.log(window.age);
console.log(age);
}
t();
</script>
</body>
</html>
输出示例
c、语句块作用域:
let声明的变量只能用于语句块作用域内,而var声明的变量还可以在语句块作用域外使用
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
/*if(true){
let address="河南省郑州市高新区";
console.log(address);
}
console.log(address);//ReferenceError: address is not defined*/
if(true){
var address="河南省郑州市高新区";
console.log(address);
}
console.log(address);
</script>
</body>
</html>
验证var可以在语句块作用域外使用
验证let声明的变量只能语句块内使用
d、重复声明:
let不能重复声明变量,var则可以
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
let address="河南省郑州市高新区";
let address = "吉林省长春市宽平区";
console.log(address); //let不能重复声明 var可以
</script>
</body>
</html>