1、var
它是variable的简写,可以理解成变量的意思。在ES6之前,JS声明变量都是采用的var。
实例1:
代码语言:javascript复制var str = "Hello World!";
console.log(str);//Hello World!
实例2:
代码语言:javascript复制var a=2;
if(true){var a=3;}
console.log(a);//3
实例3:
代码语言:javascript复制for(var i=0;i<10;i ){
console.log('循环体中:' i);//循环体中:0到9
}
console.log('循环体外:' i);//循环体外:10
从实例3中可以看出,var在ES6里是用来声明全局变量。
2、let
它是‘让’,var在ES6里是用来声明局部变量。
实例1:
代码语言:javascript复制var a=2;
if(true){let a=3;}
console.log(a);//2
实例2:
代码语言:javascript复制if(true){let a=3;}
console.log(a);
//报错:Uncaught ReferenceError: a is not defined
实例3:
代码语言:javascript复制for(let i=0;i<10;i ){
console.log('循环体中:' i);//循环体中:0到9
}
console.log('循环体外:' i);
//报错:Uncaught ReferenceError: i is not defined
通过两个实例3的对比,我们可以很清楚的明白,var声明的是全局变量,而let声明的是局部变量!
作用:
通过上边的实例,我们可以看出,一个let变量我们在不同的作用域声明的时候,不会被影响。而var则会出现冲突。
实例1:
代码语言:javascript复制for(let i=0;i<10;i ){
console.log('循环体外:' i);//循环体外:0到9
for(let i=10;i<12;i ){
console.log('循环体中:' i);//循环体中:10到11,此处会输出10次,在外层的次i输出后,内层循环一次
}
}
实例2:
代码语言:javascript复制for(var i=0;i<10;i ){
console.log('循环体外:' i);//循环体外:0
for(var i=10;i<12;i ){
console.log('循环体中:' i);//循环体中:10,11
}
}
从上实例2就可以看出,var的声明会影响其他的相同变量,而let声明只会在各自的作用域声明,不会影响其他作用域的同名变量,这就导致以后我们在不同的作用域不用为声明变量而苦恼!let相当于解放更多的变量供我们使用!
3、const
它是常量的意思,就是声明开始,就对该常量赋值,后边的逻辑操作时只能使用,不能改变的值。
实例1:
代码语言:javascript复制const a;
a=3;
console.log(a);
//报错:Uncaught SyntaxError: Missing initializer in const declaration
实例2:
代码语言:javascript复制const a=2;
var a=3;
console.log(a);
//报错:Uncaught SyntaxError: Identifier 'a' has already been declared
实例3:
代码语言:javascript复制const a=2;
console.log(a);//2
作用:
当我们需要进行最大安全整数比较的时候,我们就需要用一个常量将最大安全整数(Number.MAX_SAFE_INTEGER)声明一个常量,后期在使用的时候不会害怕该值被改变。还有圆周率这些常量在用时的保存。
总结:
通过上边的实例,可以很清晰的明白: 1. var声明的是全局变量,当需要一个变量在全局多个地方使用的时候,就采用var,例如(轮播的index等); 2. let声明的是局部变量,当需要一个变量只是在某一个作用域使用,就采用let,例如(for循环的index等); 3. const 声明的是常量,声明就进行赋值,以后不可改变,只能进行使用!例如(圆周率等)