Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

let、const(es6) #1

Open
YoursJoker opened this issue Apr 2, 2020 · 0 comments
Open

let、const(es6) #1

YoursJoker opened this issue Apr 2, 2020 · 0 comments

Comments

@YoursJoker
Copy link
Owner

YoursJoker commented Apr 2, 2020

ES6总结系列之let、const篇

let命令和const命令

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

区别

1.let const只在声明的块级作用域生效

  • 在ES6之前只有 全局作用域函数作用域
  • ES6新增了大括号{}表示的块级作用域,可嵌套

2.let const预编译声明不会提前

  • 暂时性死区temporal dead zone简称 TDZ,当使用let const命令时,区块中的let const命令声明的变量从一开始就形成了封闭作用域,凡是在声明前使用都会报错
  • 特别注意:声明前使用typeof也会报错,而ES6之前typeof是一个绝对安全的函数

3.不可以重复定义

  • 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

欢迎star,持续更新ing...
ES6总结系列参考自阮一峰《ES6入门教程》

下一篇:ES6总结系列之 变量的解构赋值 篇

@YoursJoker YoursJoker changed the title ES6总结系列之let、const篇 let、const(es6) Aug 3, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant