js中var let const三个关键字的理解
看到别人在变量前用的let const有点懵,怎么和我用的var不一样呢?难得是我out了?网上查了一下相关的资料,整理一下,方便记忆,也不知道是不是老了,记忆力有点下降。
let const是ES2015引入的新关键词,这两个关键字在JavaScript中提供了块作用域(Block Scope)变量(和常量)。之前我只知道全局作用域和函数作用域。话不多说,我们分别来看一下这三个关键字有什么作用和哪些区别。
var:
var是用来声明变量的.
1.如果在全局中声明,则为全局变量,它的作用域范围是全局环境。
var names = "貂蝉";
function two(){
console.log(names);//可以用
}
two();
console.log(names);//可以用。
2.如果在方法中声明变量,则为局部变量,也只能够在当前函数内部使用。
function one(){
var name="小红";
console.log(name);//这里可以用,打印出 小红。
}
one();//记得调用,不调用不会执行。
console.log(name);//这里访问不到name
3.如果我们在声明变量时忘记加var 关键字,那它就属于全局属性,通过作用域链一层一层往上找。
function three(){
age=20;
console.log(age)//这里会打印出20
}
three();
console.log(age)//这里会打印出20 访问到three() 中的变量了。
let:
1.let是块级作用域 声明的变量只在let所在的代码块可以使用(也就是这个{}括号里,括号外的都使用不了)。
{
var a=10;
}
console.log(a);//这里可以打印出 10
{
let b=20;
}
console.log(b)//这里会报错 b is not defined
2.使用var关键字重新声明变量会带来一些问题,在块中重新声明变量会改变块外的。而使用let声明就可以很好的解决这个问题。
var a = "aaa";
{
var a= 10;//在这里重新声明变量只是想让它在这个块儿内使用,不想改变块外的变量。
}
console.log(a)//这里的a 变成 10
var b = "bbb";
{
let b = 20;
console.log(b)//打印出20
}
console.log(b)//打印出 bbb,块外的变量没有被改变。
3.在一个块级作用域内,let不能重复定义.
{
let a =10;
let a =20;//会报错
}
4.不存在变量声明提前,变量需要先声明再使用。
{
console.log(a);
let a = 10;//会报错
}
5.let 循环作用域。
var i=10;
for(var i=0;i<5;i++){
//我们只是想让i在这个循环中使用,而不影响循环体外的变量i。
}
console.log(i)//这里输出的是5.
var i=10;
for(let i=0;i<5;i++){
//现在循环体内的i不会好外面的全局变量发生冲突了。
}
console.log(i)//这里输出的是10
6.在函数体内用var let声明变量相似,都是局部变量。
7.在函数体外或代码块外使用 var 和 let 关键字声明的变量也有点类似,它们的作用域都是全局的。
const:
用于声明一个或多个常量(一旦赋值,不可以改变),声明时必须进行初始化,且初始化后值不可再修改。也是块级作用域,命名使用大写字母,不允许重复定义,不存在变量声明提前,也是先声明再使用。
const NUM = 20;
NUM = 20;//会报错
//声明时必须要初始化
const NUM;
NUM = 20;//错误写法
const NUM = 20;//正确
以上是我整理的关于var let const 这三个关键字的理解,有哪里不对的希望各路大神帮忙指正。