介绍
let和var const都是声明变量的,const声明的是常量,声明了,值就不能改变,var和let作用类似,但依旧有很大差别,下面就主要介绍下他们的作用和区别吧.const语义化更好,如果不想改变值,用const最好
全局作用域与局部作用域:
首先要了解一下,全局作用域与局部作用域(函数作用域)
全局作用域:
全局作用域是指变量可以在整个网页的任意位置,你都可以访问并调用,用于全局作用域的变量也被称为全局变量,全局变量一般设置为我们经常调用的变量
一般最外层设置的变量具有全局作用域,当然啦,函数也是我们整个页面可以调用的,这只是指的是我们的最外层函数哦,它也是有全局作用域的.
还有之前讲过的没有用let const var声明的直接给变量赋值的也具有全局作用域
str = 'Hello World!'//相当于window.str
当然啦,这个都可以了,那我们直接通过window对象,来调用它的属性名也是具有全局作用域的 ps:window.age...
局部作用域
在函数内部'声明'的变量具有局部作用域,变量也被称为局部变量
function getName() {
let name = '我是齐天大圣孙悟空'
}
这个name就是局部变量,同样的,局部变量的访问范围也只是在自己的局部作用域可以访问和调用的,因为这样,我们可以在不同的作用域可以重新声明变量名一样的变量,可以让有取名困难症的人少掉一点头发啦
function getName() {
let name = '我是齐天大圣孙悟空'
}
let name = '我是天蓬元帅猪八戒'
console.log(name);
//不会报错,最终输出结果:我是天蓬元帅猪八戒
let
let语法: let 变量名 = 变量值;
let 声明的变量只在 let 所在的作用域内有效。其他地方是访问不到的
{
let num = 1
}
console.log(num);//这里是访问不到let声明的变量的
var
var 声明的变量在全局都可以访问到,并且你可以多次重新声明它,而let不能重新声明(同一作用域)
区别
1.如果我们在循环,判断中分别用let和var来声明全局变量,然后改变他们的值,var是可以被改变,而let不受影响
//循环
var i = 5;
for (var i = 0; i < 10; i++) {
}
console.log(i);//结果为10
let j = 5;
for (let j = 0; j < 10; j++) {
}
console.log(j);//结果为5
//判断
var m = 1;
if (true) {
var m = 3;
}
let n = 1;
if (true) {
let n = 3;
}
console.log(m);//结果为3
console.log(n);//结果为1
- 重新声明时 var 可以在任何地方重新声明,let不能在相同的作用域中重新声明
let x =1;
let x = 2;//报错
let x = 1;
{
let x = 2;
console.log(x);//不报错,结果2
}
console.log(x);//结果1
3.变量提升 var是可以先使用在声明的
console.log(y);
var y =10;//结果是undefined,未定义,而不是报错
console.log(z);
let z =10;//报错
使用var变量提升,上面的使用变量相当于声明了,但不会把后面声明并初始化的值拿到上面,所以打印的是undefined
因为var有很多不稳定因素,例如卸载for循环里的变量值可以影响到全局,可以一直重复声明...推荐使用ES6新出的let,而不是陪伴了我们很久的var.