2017-03-21-javascript-js没有块级作用域

我想念泉州的夏天了

js没有块级作用域

在java中,有方法作用域也有块作用域

public void methodA(arr) {
    // java 有方法作用域
    for(int i = 0; i < arr.length; i++) {
        // java有块作用域,i只作用于这里面

    }
    // 在后面无法继续引用i
    // System.out.println(i); 
}

而在js中,只有方法作用域,没有块作用域

function methodB() {
    // js有方法作用域
    var arr = [1,2,3,4,5]; 
    for(var i = 0; i < arr.length; i++) {
        // js没有块作用域,
    } 
    // 此处仍能获取i的值
    alert(i); // 5   
}
methodB();

即使我们定义了 var i。但是仍然是没用的,i的作用域会被提上去,等同于下面:

function methodB() {
    // js有方法作用域
    var i;
    var arr = [1,2,3,4,5]; 
    for(i = 0; i < arr.length; i++) {
        // js没有块作用域,
    }
    alert(i); // 5
}