var、let、const区别和作用域

var、let、const区别 

  • var 定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问,有变量提升。
  • let 定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问,无变量提升,不可以重复声明。
  • const 用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改,无变量提升,不可以重复声明。

js的作用域

  • 全局作用域
/1.1 全局作用域 : 在函数外部声明的变量,可以在页面任何地方被访问

        var a = 10;//全局变量
        let b = 20;//全局变量

        function fn() {
            console.log(a, b);//10,20  
        };

        fn();

        console.log(a, b);//10,20
        console.log(window.a);//10
        console.log(window.b);//undefined
  • 函数(局部)作用域 
//1.2 局部作用域 : 在函数里面声明的变量, 只能在函数内部被访问

        function fn() {
            var a = 10;//局部变量
            let b = 20;//局部变量

            console.log(a,b);//10,20
        };

        fn();

        console.log(a);//报错  a is not defined
        console.log(b);//报错  b is not defined
  • 块级作用域(es6新增) 

块作用域由 { } 包括,if 语句和 for 语句里面的 { } 也属于块作用域。在以前没有块作用域的时候,在 if 或者 for 循环中声明的变量会泄露成全局变量,其次就是 { } 中的内层变量可能会覆盖外层变量。块级作用域的出现解决了这些问题。

//1.3 块级作用域 :  在大括号里面 且 使用let声明的变量

        if(true){
            var a = 10;//全局变量
            let b = 20;//块级变量(块级作用域 :只在大括号内部起作用)
            console.log(a,b);//10,20
            
        };

        console.log(a);//10
        // console.log(b);//报错  b is not defined

块级作用域(LET)与局部作用域(VAR)区别

  • 1.相同点
    • 都是只可以在局部被访问。
  • 2.不同点
    • a. 局部范围不同
      • 局部作用域 : 仅限于 ‘函数体’ 内部声明的变量
      • 块级作用域 : 一切大括号{} 内部使用let/const声明的变量
    • b. 优先级不同(执行上下文不同)
      • 局部作用域优先级 > 块级作用域 (在函数体大括号内部,无论使用什么关键字声明var/let/const都是局部作用域)
    • c. 预解析规则不同
      • var : 显示变量提升。 (在声明前可以访问变量,获取的是undefined)
        • js编译器在预解析阶段,会把变量的声明提升到当前作用域最顶端,赋值语句还是在原地
      • let : 隐式变量提升。 (在声明前不可以访问变量,会报错)
        • 变量的声明也会提前,但是不允许被访问
        • 暂时性死区(隐式变量提升)。一旦在当前作用域使用let,则js编译器在预解析阶段会将该变量"绑定"这个作用域,不受任何外部影响

 

https://juejin.cn/post/7153593226526457887

var与let区别-详解块级作用域与局部作用域_坤小的博客-CSDN博客_块级作用域和局部作用域有什么区别 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值