JS中 变量的声明(var const let )

JS 各个声明的差异;

  • 首先明确的是 ,最开始 js 中只有 var ,
  • 在ES6 引入 letconst

目的就是为了解决一些var 的缺陷提出来的, 例如 变量提升, 以及没有作用域的概念

以下例子, 均可以 使用var let const , 来替换, 加深理解

var:

会是变量的提前, 而且可以多次赋值会自动覆盖 并 存在预解析的作用;(关于预解析详见我另一篇博客)
https://blog.csdn.net/ZHXT__/article/details/97695626


var 与直接function 创建的函数都会存在变量提升, 并且从下面的例子,可以知道, function的优先级大于var声明的, (当然我们在正式开发中一般不会这样命名)

var a=10;

//等价于 先, var  a;  变量会提升(这一步会在最前面)
//在 赋值  a = 10 ;


function fn() {
     console.log('a', a);
      var a = 1;
      function a () {
          console.log('I am a function');
      }
  }
        fn() // ƒ a () {console.log('I am a function');}
  • 这里可以尝试分别改成let const, 来进行测试
    (毕竟自己动手得到的东西才是自己的)
//存在变量提升
if(1){
    console.log(a);
	var a=1
}
 console.log(a);

let

1,不支持变量提升,即不支持变量声明预解析,只能先声明后使用(有特殊情况);
2,支持块级作用域
3,不允许重复声明

let a=1;
a=3;  //可以换成const 试试
  • let 不会成为全局变量
let a = 1;
console.log(window.1); // undefined
  • 值得注意的是:
    如下这个例子
let a = '123';
if(true) {
   console.log(a);//Uncaught ReferenceError: a is not defined
    let a = "123";
}

报出错误 a 没有被定义,而不是引用了全局作用域里的 a,说明 let 声明的 a 也被提升了。

原因是 let 设计中的暂时性死区

当前作用域顶部到该变量声明位置中间的部分,都是该let变量的死区, 在死区中,禁止访问该变量。

| 由此,我们给出结论,let声明的变量存在变量提升, 但是由于死区我们无法在声明前访问这个变量。

在这里插入代码片

const

1,不支持变量提升,即不支持变量声明预解析,只能先声明后使用;
2,支持块级作用域(即 { } 代码块中)
3,不允许重复声明
4,与let特性不一致的一点:必须初始化,不允许修改

const a=10;   //一经赋值将不可以修改

=============================================

最后在提一下直接赋值变量 即:

a=10;

这个变量a 即为全局变量此时相当于window.a=10;
这个与this的指向也是一样的,若以函数形式调用时this 指向的对象就是window


如果认为写的不好的,可以看看大佬写的:ES6

最 后 : 最后: :

在实际的使用中, 我们还是都加使用最新的 let const , 毕竟 是为了满足var 什么存在的缺陷的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值