Difference between let and var in JavaScript
本问题已经有最佳答案,请猛点这里访问。
我正在浏览Airbnb的javascript风格指南(https://github.com/airbnb/javascript)。
在第2.2节中,解释为
let是块范围的,而不是像var那样的函数范围。
1 2 3 4 5 6 7 8 9 10 11 | // bad var count = 1; if (true) { count += 1; } // good, use the let. let count = 1; if (true) { count += 1; } |
我不明白为什么第一个练习不好,第二个练习不好,如果let和var都是块范围的,那么如果我使用它们中的任何一个,它有什么区别?
函数范围和块范围有什么区别?
当某个东西是块范围的,这意味着你可以更好、更直观地控制它的寿命。
例如
1 2 3 4 5 6 | function a() { if (true) { var a = 7; let b = 42; } } |
var a在函数的范围内被拉出,而不是在if的块中进行隔离,如此;
1 2 3 4 5 6 7 | 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. } } |
…这是违反直觉的,有时会导致问题——