变量声明
var
声明特点
- 声明提前,变量提升 (先使用后声明)
- 可以重复声明
- 可在全局或函数作用域下声明
console.log(value) //undefinedvar
value = 1;
function fun1() { var value = 10;}
let
声明特点
- 不可以声明提前
- 不可以重复声明(同一个作用域下)
- 有块级作用域,只能在块级作用域中使用
for(let i){}
,在for
的小括号声明,也属于块级作用域中
//console.log(i) ERROR --- SyntaxError
//let i = 2;
//let i = 3; ERROR --- has been declared
//表示代码块的时候就可以用花括号
for(){} while(){} { let i = 3; // i在代码块中定义 }
//console.log(i) Error --- i is not defined
使用了Es6后,想要隔断作用域就只需要像下面这也写`
// ES6的保存变量的方法
for(let k = 0;k<5;k++){
//k在块级作用域
setTimeout(function(){
//console.log(k); // 0 1 2 3 4
},100)
}
以前像要隔断作用域就要像下面这样写,利用函数自身是一个作用域的特点去隔断作用域
// ES5的保存变量的方法
for(var j = 0;j<5;j++){
//es5 使用闭包保存变量,从而隔绝对全局变量的访问
(function(j){
setTimeout(function(){
//console.log(j); // 0 1 2 3 4
},100)
})(j)
}
const
声明特点
- 不可声明提前
- 不可重复定义
- 不可重复赋值4. 必须声明的同时赋值
- 和
let
一样有块级作用域
实战: 有变量名冲突可以使用
let
和const
,如果是某些不需要改变只提供方法的对象可以使用const
声明
const MAX = 100;
console.log(MAX); // 200
//const MAX = 200; Error has been defined``