ES6---let&const总结点

1、变量声明方式: var 、function 、let 、const 、class、import

2、let、const声明的变量只在它们所在的代码块中有效,形成“暂时性死区”(temporal dead zone: TDZ)

3、let命令用于for循环中,依靠JavaScript引擎才能记住每次循环的let变量

4、只有var声明的变量会存在变量提升,let和const不会

5、let、const不可以重复声明一个变量,会报错

6、ES5只用全局作用域和函数作用域,ES6增加了块级作用域

7、块级作用域(必须要有大括号,否则JavaScript不认为是块级作用域)的出现,使得广泛使用的匿名立即执行函数表达式不再有必要了

// 匿名立即执行函数表达式 IIFE
( function(){
    let a=2
}() )

// 可以直接使用块级作用域代替
{
  let a=2
}

8、ES5中函数只能在顶层作用域和函数作用域中声明,不能在块级作用域中声明;ES6中函数可以在块级作用域进行声明

if(true){ //ES5中 是非法的
  function aaa(){}
}

if(true){ //ES6中 合法的
  function aaa(){}
}

9、严格模式下,函数声明只能在当前作用域的顶层

// 不报错
'use strict';
if (true) {
  function f() {}
}

// 报错
'use strict';
if (true)
  function f() {}

10、const命令只读,一旦声明赋值便不可改变,本质上不是变量的值不可改变,而是变量指向的内存地址中所保存的数据不能改变,但要注意引用类型和基础类型数据的区别

const a = 111
a = 222 //报错

const arr = []
arr[0] = 11 //正确
arr = ['1111'] //报错

const obj = {}
obj.name = 'bob' //正确
obj = {age: 111} //报错

cost obj = Object.freeze({}) //彻底冻结引用类型的数据
obj.name = 'bob' //报错

11、var声明的变量是顶层对象的属性,let、const、class声明的全局变量不是顶层对象的属性

12、浏览器环境下的顶层对象是window,node环境下的顶层对象是 global,web worker中的顶层对象是 self,ES2020的顶层对象设置为globalThis

// 获取顶层对象---方式1:
var getGlobal = function(){
   if(typeof self !== 'undefined') return self
   if(typeof window !== 'undefined') return window
   if(typeof global !== 'undefined') return  global
   throw new Error('没有找到顶层对象')
}

// 获取顶层对象---方式2:
(typeof window !== 'undefined'? window : (typeof process === 'object' && typeof require=== 'function' && typeof global === 'object') ? global : this);

就记录到这里,祝大家开心
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值