ES6系列之let,const

大家好我是YoursJoker,一个知道很多关于鲁迅名言的前端小萌新,可能鲁迅不会承认(哈哈)
个人Blog:https://yoursjoker.github.io/ 刚建立,求有空大佬们过来提提意见
github:https://github.com/YoursJoker 欢迎star(目前是真空的,我会加油逐步完善)

let命令和const命令

ES6新增的let命令和const命令和var类似,都是用来声明变量

区别

  • let const只在声明的块级作用域生效
  1. 在ES6之前只有 全局作用域函数作用域
  2. ES6新增了大括号{}表示的块级作用域,可嵌套
  • let const预编译声明不会提前
  1. 暂时性死区temporal dead zone简称 TDZ,当使用let const命令时,区块中的let const命令声明的变量从一开始就形成了封闭作用域,凡是在声明前使用都会报错
  2. 特别注意:声明前使用typeof也会报错,而ES6之前typeof是一个绝对安全的函数
  • 不可以重复定义
  1. let const在同一个代码块不可以重复定义,否则会报错

let命令

1.for循环中用let声明的迭代变量每次都是新的变量

var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6

每一次循环的i其实都是一个新的变量,JavaScript引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算

2.for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域

for (let i = 0; i < 3; i++) {
  let i = 'abc';
  console.log(i);}
// abc// abc// abc

a声明了两次,表明函数内部的变量i与循环变量i不在同一个作用域,有各自单独的作用域

const命令

const命令定义时必须初始化
const定义的变量为原始值时不可改变,为引用值时对象的属性可以改

###顶层对象的属性

  1. 在浏览器环境指的是window对象,window也有实体含义,指的是浏览器的窗口对象
  2. 在Node指的是global对象
  3. ES5顶层对象的属性全局变量等价
  4. ES6中为了保持兼容性
    var命令和function命令声明的全局变量,依旧是顶层对象的属性
    let命令,const命令,class命令声明的全局变量,不属于顶层对象的属性
  5. globalThis对象,2020新增顶层对象,在任何环境下globalThis都存在,都可以拿到顶层对象,指向全局环境下的this

ES6入门参考自阮一峰《ES6入门教程》

发布了2 篇原创文章 · 获赞 1 · 访问量 33

猜你喜欢

转载自blog.csdn.net/m0_46358229/article/details/105230513