一、var命令
1.var命令声明的变量在全局范围内有效,可以修改:
<script type="text/javascript">
var a = 10;
function change(){
a= 20;
console.log(a); //20
}
change();
</script>
2.在声明时,未初始化,会输出undefined,不会报错:
<script type="text/javascript">
var a;
console.log(a); //undefined
</script>
3.存在变量提升:
<script type="text/javascript">
console.log(b); //undefined
var b = 30;
</script>
二、let命令
1.let的用法类似于var,但是所声明的变量,只在let命令所声明的代码块中有效:
<script type="text/javascript">
for(let i=0;i<10;i++){}
console.log(i); //报错
</script>
2.不存在变量提升,即:在用let命令声明变量之前,该变量是不可用的:
<script type="text/javascript">
console.log(a); //报错
let a = 10;
</script>
3.let不允许在同一作用域内重复声明同一变量:
<script type="text/javascript">
//报错
(function(){
let a = 10;
var a =20;
})();
</script>
<script type="text/javascript">
//报错
(function(){
let a = 10;
let a =20;
})();
</script>
三、const命令
1.const命令声明一个只读常量。一旦声明,变量的值不在改变:
<script type="text/javascript">
const a =10;
console.log(a); //10
a = 20; //报错
</script>
2.const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。
<script type="text/javascript">
const a; //报错
</script>
3.const的作用域与let命令相同:只在声明所在的块级作用域内有效。
<script type="text/javascript">
if(1){
const a =10;
}
console.log(a); //报错
</script>
4.不存在变量提升,即:在用const命令声明变量之前,该变量是不可用的:
<script type="text/javascript">
if(1){
console.log(a); //报错
const a =10;
}
</script>
5.const不允许在同一作用域内重复声明同一变量:
<script type="text/javascript">
//报错
(function(){
const a = 10;
var a =20;
})();
</script>
<script type="text/javascript">
//报错
(function(){
const a = 10;
const a =20;
})();
</script>
6.如果是复合类型的变量,变量名不指向数据,而是指向变量名所在的地址。const只保证变量名指向的地址不变,并不保证该地址的的数据不变:
<script type="text/javascript">
const p = {};
p.name = "kity";
console.log(p.name); //kity
p = {}; //报错
</script>
网友评论