大家好我是YoursJoker,一个知道很多关于鲁迅名言的前端小萌新,可能鲁迅不会承认(哈哈)
个人Blog:https://yoursjoker.github.io/ 刚建立,求有空大佬们过来提提意见
github:https://github.com/YoursJoker 欢迎star(目前是真空的,我会加油逐步完善)
let命令和const命令
ES6新增的let
命令和const
命令和var
类似,都是用来声明变量
的
区别
let
const
只在声明的块级作用域
生效
- 在ES6之前只有 全局作用域 和 函数作用域
- ES6新增了大括号{}表示的块级作用域,可嵌套
let
const
预编译声明不会提前
- 暂时性死区temporal dead zone简称 TDZ,当使用
let
const
命令时,区块中的let
const
命令声明的变量从一开始就形成了封闭作用域,凡是在声明前使用都会报错- 特别注意:声明前使用typeof也会报错,而ES6之前typeof是一个绝对安全的函数
- 不可以重复定义
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
定义的变量为原始值时不可改变,为引用值时对象的属性可以改
###顶层对象的属性
- 在浏览器环境指的是
window
对象,window
也有实体含义,指的是浏览器的窗口对象 - 在Node指的是
global
对象 - ES5中顶层对象的属性和全局变量是等价的
- ES6中为了保持兼容性
①var
命令和function
命令声明的全局变量,依旧是顶层对象的属性
②let
命令,const
命令,class
命令声明的全局变量,不属于顶层对象的属性 globalThis
对象,2020新增顶层对象,在任何环境下globalThis
都存在,都可以拿到顶层对象,指向全局环境下的this
ES6入门参考自阮一峰《ES6入门教程》