js中var,let,const的区别和用法

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所有

猜你喜欢

转载自blog.csdn.net/suandyanr/article/details/106671856
今日推荐