var,let,const你真的理解了吗?

1 篇文章 0 订阅

近期学习心得记录,接下来的内容如果你之前也和我一样一知半解,那评论区留下你的剑~哈哈哈哈哈哈哈哈

好了,正题开始。

let , const 这两个关键字是ES6新增的,let,const 定义的变量会被束缚在{ }这样的代码块中,不会有变量提升,但是var 就存在变量提升。(嗯,之前知道了这个概念,但是不知道是个什么情况,下面我们来分析吧)

1.

<script>
    console.log(a);
    var a = 'hello?';
  </script>

在这里插入图片描述

解释:var定义的变量被提升到了作用域顶部,如果一个变量只是定义了,但是没有给它初始值(a = ‘hello?’ 这句话没有被执行到,因此没有初始值),那么它的值就是undefined;这里想深入理解的话可以去学习JavaScript的编译和运行时。

2.

 <script>
    console.log(b);
    let b = 'hi?';
  </script>

在这里插入图片描述

解释:let 不存在变量提升,因此,b在定义它之前,你试图使用console.log()函数引用它,就会报引用错误。

3.

<script>
    var tmp = 'out';
    if(true){
      tmp = 'in';
      let tmp;
    }
  </script>

在这里插入图片描述

解释:同样是引用错误,因为代码在编译阶段确定了作用域,if(true)后面的{}花括号形成了一个块级作用域,因此,你试图在块级作用域中用let定义tmp之前给tmp赋值,就会报引用错误。

4.

<script>
    const bar = 'bar';
    let bar = 'cbar'
  </script>

在这里插入图片描述

解释:这个就好理解了,const关键字定义的常量(bar)指向一个基本数据类型(‘bar’),那么它(bar)是不可改变的,同时也不允许重复声明。

扩展:但是const定义的常量指向的是一个对象类型,那么这个对象类型里面的值是可以改变的(涉及到JS的堆和栈,感兴趣的去看看呗~)。例如下面的代码

<script>
    const obj = {
      name : 'myc',
      age : 22
    }
    console.log(obj)
    obj.name = 'lpp'
    console.log(obj)
  </script>

在这里插入图片描述

好了今天的分享到这里了,前端小白的进阶之路分享就这么多了,如果之前对(let,const,var)一知半解的你,现在一知 超过 半解(手动滑稽),请收藏好!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值