一、变量
关键字 | 特点 |
---|---|
var | 1. 可以重复声明 2. 无法限制修改 3. 没有块级作用域 4. 变量提升 |
let | 1. 不能重复声明 2. 可以修改 3. 不存在变量提升 |
const | 1. 不能重复声明 2. 不存在变量提升 |
暂时性死区
let/const声明的变量,这个区块{}会形成封闭的作用域
在这个作用域内,在let/const关键字之前使用这些变量,就会报错。
TDZ暂时性死区就是指 : let/const关键字之前的代码块
// TDZ start
typeof tep // Reference Error
// TDZ end
let tep = ''
但神奇的是,如果对未使用的变量使用typeof ,反而不会报错
函数式死区
有些死区非常隐蔽,可能面试会搞你
function bar(a=b,b=3){
return [a,b]
}
bar() // 报错
这是因为,使用函数默认值 在编译后,会使用let变量声明
function bar(a,b) {
let a = b
let b = 3
}
块级作用域
在ES6中,{},使用花括号即可建立一个块级作用域
{
let a = 3
{
console.log(a) // logs 3
}
}
块级作用域是IIFE不再必要了
回想以下IIFE的作用
- 避免函数命名空间污染
- 通过创建函数作用域避免函数内变量污染全局作用域
- 函数自调用
网友评论