第一章 基础
1.let和const命令
(1).let用于声明变量,所声明的变量只在当前代码块有效
特点:不存在变量提升 所以在变量声明之前就使用会报错
暂时性死区 只要块级作用域内存在let命令,他所声明的变量就绑定在该区域,不再受外部影响 如全局和块内都有同名变量 在块内操作是操作块内的那个变量
ES明确规定,如果区块中存在let和const指令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域,只要在声明之前使用,就会报错
不允许重复声明 不允许在同一作用域重复声明,因此不能在函数内部声明与参数同名的变量
tips:function bar(x = y, y = 2){
console.log(x,y);
} // 会报错 因为当把y的值赋给x时y还没有声明
(2).块级作用域
块级作用域产生之前不合理的场景:
内部变量可能会覆盖外部变量 如内部有与外部同名的变量声明 由于变量声明提升 所以内层覆盖外层
用来计数的变量泄露成全局变量 由于闭包问题 计数的变量不能释放成为全局变量 失去计数功能
let实际上为js提供块级作用域
特点:
let定义的变量 外层代码不受内层代码影响
内层作用域可以定义与外层同名的变量
可以取代匿名函数
tips:
ES6规定,函数本身的作用域在其所在的块级作用域中
在严格模式下,函数只能在顶层作用域和函数内声明,其他情况会报错