SOURCE

function f() {
    console.log ('I am outside !');
}

(function() {
    if (false) {
        function f() {
            console. log ('I am inside !');
        }
    }
    f()
})()


//es5环境 会这样解析执行 函数声明提升
function f() { console.log ('I am outside !'); } 
(function () { 
    function f() { console.log ('I am inside !'); } 
    if (false) { 
    }
    f() ; 
})();

//es6环境下,在浏览器的 es6 环境中 ,块级作用域内声明函数的行为类似于 var 声明
function f() { console.log ('I am outside !'); } 
(function () { 
    var f;
    if (false) {
        // var f = function() {console.log('I am inside')} es6类似这样声明 会提升f
        function f() { console.log ('I am inside !'); } 
    }
    f() ; 
})();

// 考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数。如果确实需要,也
// 应该写成函数表达式的形式,而不是函数声明语句。

{
    let a = 'sec';
    let f1 = function() {
        return a;
    }
    console.log(f1())
}


console 命令行工具 X clear

                    
>
console