JavaScript学习笔记——let与const

完整的ES6说明:ES6入门教程

let命令

  1. let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
  2. 'let’命令很适合在for循环中使用。
  3. let命令不进行变量提升。
  4. let命令存在暂时性死区。即在代码块内,使用let命令声明变量之前,该变量都是不可用的。
  5. let命令不允许重复声明变量。

块级作用域

  1. ES6 允许块级作用域的任意嵌套。

  2. 内层作用域可以定义外层作用域的同名变量。

  3. ES6 规定,块级作用域之中,函数声明语句的行为类似于let,在块级作用域之外不可引用。

  4. 在浏览器的ES6中,有如下特殊的处理方式:

    • 允许在块级作用域内声明函数。
    • 函数声明类似于var,即会提升到全局作用域或函数作用域的头部。
    • 同时,函数声明还会提升到所在的块级作用域的头部。

    上面三条规则只对 ES6 的浏览器实现有效,其他环境的实现不用遵守,还是将块级作用域的函数声明当作let处理。
    考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句。

const命令

const的基本功能与其他语言大体一致。

  1. const的作用域与let命令相同:只在声明所在的块级作用域内有效。
  2. const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。
  3. const命令同样不允许重复声明变量。
  4. 使用const命令去声明一个对象常量时需特别注意:const只能保证变量所指的内存地址不发生改变,若一个对象被定义为const,其对象本身是可以改变的,只是不能将其指向其他内存地址。
  5. 若要使对象本身也变得不可修改,应该使用Object.freeze()方法,括号内列写对象的属性,返回值为该对象。
  6. Object.freeze()类似于浅拷贝,对更深级别的对象只是引用,因此,若想进行彻底的冻结(类似于深拷贝),则可以调用如下函数:
var constantize = (obj) => {
  Object.freeze(obj);
  Object.keys(obj).forEach( (key, i) => {
    if ( typeof obj[key] === 'object' ) {
      constantize( obj[key] );
    }
  });
};

顶层对象的属性

  1. 顶层对象,在浏览器环境指的是window对象,在Node指的是global对象。ES5 之中,顶层对象的属性与全局变量是等价的。
  2. ES6中,一方面规定,为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从 ES6 开始,全局变量将逐步与顶层对象的属性脱钩
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值