js中var,let,const的区别和用法
在ES6出来之后,js中添加了块级作用域,这是在原来的ES5中没有的,同样也就衍生出let和const两种新的变量声明的方式。
ES5中var的写法
function add(num1, num2){
var sum = num1 + num2;
return sum;
}
var result = add(10, 20);//这是输出的是30
alert(sum);//但是这里的调用是完全不行的
也就式说,在原来的es5中,js会将声明的变量添加到最近的也就是当前的执行环境中,由于是在function中定义的sum,所以这里的sum就会被添加到function的局部环境中,之后再进行调用当然就是不可以的了。但是令人窒息的操作是在下面:
for(var i = 0; i < 10; i++){
...
}
alert(i)//i = 10,
可以看到就是,由于当前的执行环境是全局环境,那么js直接将定义的变量i添加到了全局环境中,那么在for循环之后,依然可以对循环中定义的i进行操作。
ES6中的let和const
ES6中新增添的let和const都是支持块级作用域的
let的用法
let 和 var 的最大的区别就是支持块级作用域,但是依旧有其他的不同的地方:
(1)let在全局环境中声明的话就是全局变量,在局部环境中声明就是局部变量(在{}内有效,{}外是无效的)
let i = 2;
for(let i = 0; i < 10; i++){
...
}
alert(i)//这里输出的依旧是2
(2)let只能先声明,再进行调用;var可以先调用再声明
//var这样用是可以的:
name = "asu";
var name;
//但是这样使用let是不可以的,let一定需要先声明
name = "asu";
let name;//错误的
(3)在相同的作用域中let声明的变量是不可以重置的,也就是不可以重复的声明;但是var是可以对之前声明的变量进行重置的
//var可以重置声明的变量:
var x = 3;
var x = 2;
alert(x)/这里输出的是2
//let则是不可以重置已经声明的变量的:
let y = 2;
let y = 3;//error,这是错误的
if(true){
let y = 5;
alert(y)//在局部环境中声明,环境不一样,输出5
}
alert(y);//依旧输出的是2
const的用法
首先说说let和const的区别吧
(1)let在声明的时候可以不用初始化,const在声明的时候必须要进行初始化。
//这样声明是正确的
var name = "LiHua";
//声明的时候没有初始化是错误的:
var city;
city = "wuhan";//error
(2)const声明的变量是不可以修改的,但是这不是绝对意义上面的不可以的修改,注意const定义的常量的值是不可以再进行赋值修改的,但是const定义的数组和对象是可以进行添加和修改其中的元素的,最最重要的是定义的数组和对象是不可以重新赋值的;let定义的变量的值是可以修改的。
const names = ["Bob", "Kathy", "LiHua"];
const person = {
name:"LiLei", age:20};
//添加元素和修改元素都是可以的
names[0] = "Li";
names.push("Pob")
person.age = 21;
person.gender = "female";
//但是重新给数组和对象进行赋值是错误的
names = ["asu", "LiLi"];//error
person = {
name:"Bob", age:18};//error
相同的是:
(1)在相同的作用域中,都是不可以进行重复声明的,不可以重置声明
(2)用let ,const声明的全局变量不归window所有