ES6语法篇(1)——let和const

ES6语法篇(1)——letconst

  let命令

  (1let声明变量,只在let命令所在的代码块里有效,没有变量提升,变量提升就是在声明变量之前使用该变量,其值为undefined,而let声明变量只能在变量声明之后使用。

  (2ES6明确规定,如果在块级作用域内存在letconst命令,这个区块对这些声明的变量从一开始就形成了封闭区域,凡是在声明之前使用这些变量就会报错。

  (3)不允许重复声明变量。

  (4)块级作用域。ES6只有函数作用域和全局作用域,而letJavaScript添加了块级作用域:

  

function f1(){
        let n = 5;
        if ("1") {
            let n = 10;
        }
        console.log(n)
    }
    f1();  // n=5

  外层代码块不受内层代码块的影响。

  (5ES5规定只能在函数声明只能在函数作用域和全局作用域,ES6引入了块级作用域,并且规定可以在块级作用域内声明函数。而且在块级作用域内声明的函数类似于let,在块级作用域外面不可引用:

function f() {console.log("i am in outside")};
(function(){
  if (false){
    function f(){
      console.log("i am in inside");
  }
}
f(); // Uncaught TypeError: f is not a function
}())

  以上代码会在符合ES6的浏览器中报错,阮一峰大佬建议在块级作用域中使用函数表达式,取代函数声明。

  

  const命令

  const声明一个只读的常量,一旦声明就无法更改。而且声明的同时,就得立即初始化,不然就会报错。在其他地方,constlet用法完全一样。

const实际上保证的是变量指向的内存地址不得改动。对于简单的数据类型,值就保存在变量指向的内存地址,等同于常量。对于对象和数组,变量指向的内存地址,保存的是一个指针,const保证的是这个指针是固定的,而指针指向的数据结构就不能控制了。也就是说,const声明对象和数组,对象与数组的值均是可以更改的。

猜你喜欢

转载自www.cnblogs.com/OnePieceKing/p/11608100.html