目录
块级作用域
块级作用域:块级作用域之中,函数声明语句的行为类似于let,在块级作用域之外不可引用。通过var声明的变量存在变量提升的特性。
let和const
- 块级声明用于声明在指定块的作用域之外无法访问的变量,let和const都是块级声明的一种;
- 不会被提升,重复声明报错,不绑定全局作用域。
临时死区(TDZ)
- let和const声明的变量不会被提升到作用域顶部,如果在声明之前访问这些变量,会导致报错;
- 因为JavaScript引擎在扫码代码发现变量声明时,要么将它们提升到作用域顶部,要么将声明放在TDZ中;
- 访问TDZ中的变量会触发运行时错误,只有执行过变量声明语句后,变量才会从TDZ中移出,方可访问。
模板字符串
要在字符串中使用反撇号,可以使用反斜杠转义,在模板字符串中,空格,缩进,换行都会被保留。
嵌入变量:模板字符串支持嵌入变量,只需要将变量名写在${}之中,任意的JavaScript表达式都是可以的 。
解构结合
变量的解构赋值:从对象或数组中提取数据,并赋值给变量(多个)。
let obj = {
username: 'dance',
age: 18,
sex: 'man'
}
//对象解构赋值,就是从指定对象中提取存在的属性,如果属性不存在就是undefined,只提取需要的属性。
let {username,age} = obj
console.log(username,age)
//数组解构赋值,就是从数组中提取指定下标的值,同样的不存在就是undefined,也是只提取需要的下标的值即可。
let arr = [1,'dfsd',2,4,5]
let {one,three} = arr
//形参解构函数
function descFoo({username,age}){
console.log(username + ‘:’+age)
}
descFoo(obj)
//直接返回一个对象
let func = ({value, num}) => ({total: value * num})
// 使用
var result = func({
value: 10,
num: 10
})
console.log(result); // {total: 100}
箭头函数
- 箭头函数没有this,需要通过查找作用域链来确定this的值;
- 没有arguments,因为箭头函数可以访问外围函数的arguments对象;
- 不能通过new关键字调用,JavaScript函数有两个内部方法,【call】和【Construct】当通过new调用函数时,执行【Construct】方法,创建一个实例对象,然后再执行函数体,将this绑定到实例上,当直接调用的时候,执行【call】方法,直接执行函数体。箭头函数并没有【Construct】方法,不能被用作构造函数,如果通过new的方式调用,会报错;
- 没有new.target,没有原型,于是箭头函数也不存在prototype这个属性。