const关键字、全局作用域、作用域链、预解析、变量与函数提升以及var与let、const的区别总结

const关键字

  • const 是声明 常量
  • 变量: 可以变化的量,顾名思义,声明后还可以对它进行修改
  • 常量: 声明的数据不能修改的
   const num2 = 10
   num2 = 30  // 报错,因为常量值不能被修改
  • const也是认块级作用域
        {
            const num = 10
            console.log(num)
        }

        console.log(num) // 报错,const也认块级作用域
  • const跟let的区别,只有一个是不允许修改,一个是可以修改,其他都是一样的
  • const可以用在哪?
    • 当你需要确保一些数据不能被修改时就用 const
    • 例如:圆周率,做活动时的折扣,例如打8折(0.8),定好0.8后不允许被改也可以用常量

全局作用域

  • 顾名思义:全局作用域里声明的变量、常量,在所有作用域里都能被访问
  • 全局作用域指的是从 script 开头 到 script 结尾的不加任何括号的区域
 <script>
        // 全局作用域

        {
            //块级 局部作用域
        }

        // 全局作用域


        function fn() {

            // 函数 局部作用域
        }

        // 全局作用域
        
    </script>
  • 全局作用域声明的变量是全局变量,那么这种变量会伴随着从网页打开,到网页关闭才会销毁和回收内存空间
  • 所以要少声明全局变量,不然会一直占着内存空间,除此以外还会造成变量名污染(占用了一个变量名)

作用域链

预解析

  • 浏览器在执行JS代码之前,会先把所有的变量与函数声明先解析一遍
    • 为什么要这么做?
      • 因为它需要提前确定大概开多少个空间,空间够不够,先提前开好
      • 这样子到时候执行代码,就不用临时开空间,大大提升性能等好处
  • 所以总而言之,预解析是在正儿八经执行代码之前来解析的,所以称之为预解析
  • 如何验证,是在代码执行之前解析的?
    • 以前就算某句代码报错,但是它前面的代码会被执行,只是后面代码不再执行了
    • 但是如果你是变量声明报错,里面一句代码都不会执行,所以证明有个阶段叫预解析,在预解析里如果发现变量声明报错,那么后面代码就不执行
       // 证明有个阶段肯定是在执行代码以前就来解析的
        // 这个阶段就叫预解析
        console.log('111111')
        let age = 99
        let age = 999  // let是不允许在同一个作用域里声明多个同名变量的,所以要报错
        console.log('222222')

变量与函数提升

  • 预解析阶段里
    • 除了有检测变量声明是否正常,和解析要开多少空间以外
    • 还有个步骤,就是变量提升与函数提升
  • 变量与函数提升
    • 指的是所有用 var 声明的变量和 function 声明的函数,会把他们的声明语句提前到它所在的作用域最顶端,赋值语句留在原地
    • let没有提升
  • 例:
console.log(age) // undefined  因为变量提升后,var age会提升到最前面
var age = 99
console.log(age) // 99

var与let、const的区别总结

  • 相同点:他们都是声明变量(也就是说值可以改变)
  • 不同点:
    • 作用域不一样,var认函数作用域, let认块级作用域
    • var参与变量提升,let不参与变量提升
    • var声明的全局变量是window的属性,let声明的全局变量不是window的属性
    • var可以在同一个作用域里声明多个同名变量,let不允许,会报错
  • const跟let特点一样,只不过const的值不允许修改

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值