SOURCE

//当使用关键字var时,该变量是在距离最近的函数内部或是在全局词法环境中定义的。

var globalNinjia = 'Yoxi'
function func() {
    var a = 'jumping'
    for (var i = 1; i < 3; i++) {
        var b = globalNinjia + " " + a
        console.log(b)
        console.log(a)
        console.log(i)
    }
    //for之中是块级作用域
    //为什么在块级作用域内定义的变量,在块级作用域外仍 然能够被访问:
    //这源于通过var声明的变量实际上总是在距离最近的函数内内或全局词法环境中注册的,
    //不关注块级作用域。(变量提升)
    //也就是说b实际挂载在func的函数作用域上;
    console.log(i)
    console.log(b)
}
func()
//console.log(i)
//console.log(b)
console.log('-----------------------------------------')
function func2() {
    var a = 'jumping'
    for (let i = 1; i < 3; i++) {
        let b = globalNinjia + " " + a
        console.log(b)
        console.log(a)
        console.log(i)
    }
    //使用let或者const关键字之后
    //let和const直接在最近的词法环境中定义变量 
    //(可以是在块级作用域内、循环内、函数内或全局环境内)
    console.log(i)
    console.log(b)
}
func2()
console.log(i)
console.log(b)
console 命令行工具 X clear

                    
>
console