JavaScript中的let和var之间的区别

时间:2016-05-09 20:12:50

标签: javascript

我正在浏览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都是块范围的,那么如果我使用其中任何一个,它会有什么不同?

函数范围和块范围之间有什么区别?

1 个答案:

答案 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没有这个问题。