不同的块做用域

一道前端面试题对块做用域的思考

先来看一道题前端

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

相关文章
相关标签/搜索