先来看一道题前端
var age = 100;
let year = 6;
(function() {
let age = 10;
var year = age * 3;
console.log(year)
})();
console.log(year)
复制代码
上结果,运行正常,由于第二次声明的age, year在函数做用域内 面试
正戏来了bash
var age = 100;
let year = 6;
if (age > 12) {
let age = 10;
var year = age * 3;
}
console.log(year)
复制代码
发现报错了, 以下函数
咱们知道在引入let, const以前,JS是没有所谓的块做用域.ui
引入后, JS有了全局做用域, 函数做用域, 和let/const + {} => 块做用域.spa
可是块做用域却并无像函数做用域同样将var声明的变量限制在块做用域中,反而是var的声明提高到全局与let造成了重复声明而报错.code
js的块做用域并不一样于函数做用域,对var没有约束性.cdn