JavaScript之变量声明

今天看到变量声明,突然发现自己对3个关键字的作用域有些迷了,写篇文章反思一下啊。


JavaScript中变量是松散类型,也就是变量可以保存任何类型的值,我们声明的变量不过是可以保存任何值的占位符。
JavaScript中声明变量的关键字主要有3个,下面是自己对这3个关键字的作用与区别的理解。

1. var

  • 作用域:函数。如果在函数内部定义变量时省略var关键字,则会创建一个全局变量
    eg:
function test () {
  name = "zhangsan"; // 全局变量
}
  • 声明提升。var关键字声明的变量会自动提升到函数作用域顶部。
    eg:
function test () {
  console.log(name); // undefined
  var name = "zhangsan";
}
// 在执行至函数时,会首先对内部var关键字声明的变量就行定义(只是定义未初始化,所以为undefined)
  • 可以反复多次使用var声明同一个变量。个人理解,因为var的声明提升,所以多次声明只是修改值的操作,不会产生重命名变量。

2. let

-作用域:块。{}、if、for语句块

  • 不允许冗余声明。
    eg:
let age;
let age;// error

var name;
var name;// 没有问题

var id;
let id;// error,不会因为使用不同关键字而影响冗余声明。let和var声明的是同一个变量,类型并没有不同,只是作用域不同,不允许。

// 下面这种情况不会出错,因为这是嵌套声明,在同一个块中没有重复变量。
let name = "zhangsan";
if(true){
  let name = "lisi";
}

3. const

与let基本相同,区别就是const声明的相当于一个常量,修改常量时不允许的,所以const声明的变量不能修改,也就不能使用const声明迭代变量(迭代变量会自增)。
但是可以在for-in,for-of中使用const声明一个不会被修改的循环变量。
eg:

for(const key in {a:89,b:78}){
  console.log(key);
}

写在最后。使用var在全局作用域声明的变量会成为window对象的属性,但是let不会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值