我正在浏览Airbnb(https://github.com/airbnb/javascript)的javascript风格指南。
在第2.2节中解释了
let是块范围而不是函数作用域,如var。
// bad
var count = 1;
if (true) {
count += 1;
}
// good, use the let.
let count = 1;
if (true) {
count += 1;
}
我不明白为什么第一个是糟糕的练习,第二个是坏的,如果let和var都是块范围的,那么如果我使用其中任何一个,它会有什么不同?
函数范围和块范围之间有什么区别?
答案 0 :(得分:4)
当某些东西是块范围时,意味着你可以更好地控制生命周期和更直观的方式
例如
function a() {
if (true) {
var a = 7;
let b = 42;
}
}
var a在函数范围内被拉出,而不是在块中为if隔离,所以就像这样;
function a() {
var a; // The JS compiler pulls the var out to this level
if (true) {
a = 7;
let b = 42; // but keeps the let in this block.
}
}
..这是违反直觉的,有时会导致问题 - let
没有这个问题。