关于js作用域的问题求解!!

        var a =1;
        function fn(a){
            console.log(a);//undefined
            a=3;
        }
        fn();
        console.log(a);//1
        var a =1;
        function fn(a){
            a=3;
            console.log(a);//3
        }
        fn();
        console.log(a);//1

为什么第一个代码块里面最后一个是1而不是3还有那个undefined是因为实参是0?第二个代码块中a=3上移以后实参就没有用?
求解

第一个图解

我只画了第一题的图解,第二题,你自己画吧~


可以看下:
https://blog.csdn.net/aningde/article/details/104051158
https://mp.weixin.qq.com/s/p4vNzGZC7Sw4j2ijUVGgdg

function fn(a){
        console.log(a);//undefined
        a=3;
}

fn(a) 里的a是函数内部的a,a=3只影响内部,并不会影响外部的a值;如果函数定义为function fn(b),内部执行a=3,那就会影响外部的a值。