es6的作用域以及let和const

一、作用域

  1. 全局作用域

    变量在函数或代码块{}外定义

  2. 局部作用域

    变量在函数内部定义的

  3. 块级作用域

    {}

  4. 动态作用域

    JS采用静态作用域:变量的作用域是在定义时决定的而不是执行时决定的。

    动态作用域:只能在执行阶段才能决定变量的作用域。

二、、Let

  1. 全局作用域

    变量在函数或代码块{}外定义

  2. 局部作用域

    变量在函数内部定义的

  3. 块级作用域

    {}

  4. 动态作用域

    JS采用静态作用域:变量的作用域是在定义时决定的而不是执行时决定的。

    动态作用域:只能在执行阶段才能决定变量的作用域。

三、Let

let 用来替代 var 的

因为var 有两个不足:

  • 1、var会出现变量提升现象

  • 2、var没有块级作用域

使用let声明的变量总结:

  • 不属于全局对象window

  • 不允许重复声明

  • 不存在变量提升现象

  • 拥有块级作用域

    代码如下:

    for(var i = 1; i <= 3; i++) {
        setTimeout(function(){
            console.log(i);
        }, 1000);
    }
    // 希望i的值事1、2、3、至少提供2种方案:一种使用let,另一种使用闭包
    for(let i = 1; i <= 3; i++) {
        setTimeout(function(){
            console.log(i);
        });
    }
    //js中,变量的作用域属于函数作用域,在函数执行完毕之后,他的作用域会销毁、内传也会被回收但由于闭包在函数内部创建一个子函数,且子函数可访问父函数中的作用域,即使父函数执行,作用域也不会被执行。
    //闭包作用:可以阻止变量被回收
    //缺点:比普通函数更加占用内存,可能会造成内存泄漏
    for(var q=1; q<=3;q++){
        (function(q){
            seTimeout(()=?{
                console.log(q)
            })
        })(q)
    }
    

    四、const

    const 是专门用来声明常量,用来储存保持不变的数据。

    使用const声明的常量总结:

    • 常量一旦定义就不能修改
    • 常量定义的时候必须赋值
    • 不属于全局对象window
    • 不存在变量提升现象
    • 不允许重复声明
    • 拥有块级作用域

    在 ES5 中,如何定义一个常量呢?

    其实可以使用Object.defineProperty()来实现定义常量。代码示例如下:

    Object.defineProperty(window, 'PI', {
        value: 3.1415,
        writable: false
    });
    
    console.log(PI);
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值