下面代码输出什么

207 阅读1分钟

下面代码输出什么

var a = 10;
(function () {
    console.log(a)
    a = 5
    console.log(window.a)
    var a = 20;
    console.log(a)
})()
    1. 因为函数内部var a变量声明提升,但是赋值不会提升,所以先输出undefined,再输出10,20。注意因为内部声明了新的a,所以函数内部操作的a都是局部变量a,而window.a还是10
        var a = 10;
        (function () {
            console.log(a)
            a = 5
            console.log(window.a)
            a = 20;
            console.log(a)
        })()
        console.log(a)
    1. 因为函数内部没有a,因此向外作用域找到的是全局变量a,所以这些赋值操作都是对全局变量a进行的,最终输出为10=>5=>20=>20注意。
        var a = 10;
        (function (a) {
            console.log(a)
            a = 5
            console.log(window.a)
            a = 20;
            console.log(a)
        })(a)
        console.log(a)
    1. 将a赋值给函数的参数,内部获得的参数a为局部变量,内部的操作都是局部变量的操作,全局变量a不会改变,最终输出为10=>10=>20=>10