zoukankan      html  css  js  c++  java
  • es6-1 let const 块状作用域

    首先, es6是采用严格模式的, 在es5中如果要使用严格模式, 我们需要在 js 文件首行声明 "use strice"

    块作用域 let

    先看下面一段代码

    function test() {
        for (var i = 0; i < 3; i++) {
            console.log(i) // 0 1 2
        }
        console.log(i) // 3
    }
    test()

    这里 var 声明的变量 i , 在块的外边是可以拿到的, es6出现了块作用域, 通俗理解就是 { } 之内的域, var 声明的变量可以在同级块之外拿到

    下列代码把 var 改成 let 之后

    function test() {
        for (let i = 0; i < 3; i++) {
            console.log(i) // 0 1 2
        }
        console.log(i) // Uncaught ReferenceError: i is not defined
    }
    test()

    这里就拿不到声明的 i 变量了, 因为他只属于 for 循环这个 { } 块之中

    注意 Uncaught ReferenceError: i is not defined 为什么报引用错误而不是 undefined ? 这就是因为 es6 默认采用的严格模式, 严格模式下变量未声明就不能引用

    另外同一个变量名不能用 let 重复声明, 否则会报语法错误:标识符“ a”已被声明

    let a = 1
    let a = 2
    
    // Uncaught Syntax Error: Identifier 'a' has already been declared 语法错误:标识符“ a”已被声明

    常量 const

    const 声明常量, 常量一般运用全大写来表示, 并且常量不可改变, 另外 const 跟 let 一样也是存在块作用域这个特点的

    const PI = 3.1415926
    PI = 8 //  Uncaught TypeError: Assignment to constant variable 类型错误:分配给常量
    console.log(PI)

    const 声明常量的时候必须赋值

    const PI
    PI = 8 //  Syntax Error: Missing initializer in const declaration 语法错误:const声明中缺少初始化程序
    console.log(PI)

    PS: 如果 const 常量是一个对象(Object), 对象类的单元是可以被修改的, 对象是引用类型, 返回的是指向内存中的指针, 指针未变, 对象本身是可以变的

  • 相关阅读:
    Longhorn,企业级云原生容器分布式存储
    Longhorn,企业级云原生容器分布式存储
    Longhorn,企业级云原生容器分布式存储
    数通——VLAN
    数通——动态路由
    AtCoder Beginner Contest 216 A~F 题解
    【YBTOJ】序列的第k个数
    【YBTOJ】【UVA10140】Prime Distance
    【YBTOJ】【CodeForces 372C】Watching Fireworks is Fun
    【YBTOJ】涂抹果酱
  • 原文地址:https://www.cnblogs.com/helzeo/p/11810959.html
Copyright © 2011-2022 走看看