ES6之let和const命令

let命令

基本用法
{
  let a = 10;
  var b = 1;
}
  • 有效范围:所声明的变量,只在let命令所在的代码块内有效。var命令声明的,在全局范围内都有效(适用于for循环里)
不存在变量提升
  • 变量提升:变量可以在声明之前使用,值为undefined
  • 即let命令需要声明后使用
暂时性死区
  • 块级作用域内,使用let命令声明变量之前,该变量都是不可用的。
  • 作用:主要是为了减少运行时错误,防止在变量声明前就使用这个变量
不允许重复声明
  • let不允许在相同作用域内,重复声明同一个变量。

块级作用域

ES6 的块级作用域
  • 外层作用域无法读取内层作用域的变量。
  • 内层作用域可以定义外层作用域的同名变量。
块级作用域与函数声明
  • 允许在块级作用域之中声明函数
  • 函数声明类似于var,即会提升到全局作用域或函数作用域的头部。
  • 函数声明还会提升到所在的块级作用域的头部。
    (避免在块级作用域内声明函数)
// 函数声明语句(不建议)
{
  let a = 'secret';
  function f() {
    return a;
  }
}

// 函数表达式(建议)
{
  let a = 'secret';
  let f = function () {
    return a;
  };
}

const 命令

基本用法

const PI = 3.1415;

  • 一旦声明,常量的值就不能改变;
  • 只在声明所在的块级作用域内有效;
  • 不提升,同样存在暂时性死区,只能在声明的位置后面使用。
实质

变量指向的那个内存地址所保存的数据不得改动
(如存储的是一个地址,则不可变的是地址,但可以为其添加属性)

  • 将对象冻结,使用Object.freeze方法
const foo = Object.freeze({});

// 常规模式时,下面一行不起作用;
// 严格模式时,该行会报错
foo.prop = 123;

顶层对象的属性

  • 顶层对象:在浏览器环境指的是window对象,在 Node 指的是global对象
  • var命令和function命令声明的全局变量,依旧是顶层对象的属性
  • let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性

global 对象

  • 在全局环境中,this返回的是当前模块。
  • 函数里面的this,如果函数不是作为对象的方法运行,而是单纯作为函数运行,this会指向顶层对象。但是,严格模式下,这时this会返回undefined。
  • 不管是严格模式,还是普通模式,new Function(‘return this’)(),总是会返回全局对象。
  • 可以在所有环境仲从global拿到顶层对象
// CommonJS 的写法
require('system.global/shim')();

// ES6 模块的写法
import shim from 'system.global/shim'; shim();

保证各种环境里面,global对象都是存在的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值