js函数与变量提升

1.没有参数的时候:看有没有var,或者函数申明(也就是说如果有变量提升,在函数体内就变成私有变量了,函数体内修改了不会影响父级。)
有,子集是undefined,也不会找父级,下面修改了(简单和复合类型)都不会影响父级。
没有,子集找不到,会找到父级,下面修改了(简单和复合类型)都会影响父级。

2.有参数的时候:(有传参,在函数体内就变成私有变量了,函数体内修改了 不会影响父级。除非用的同一个空间地址,也就是复合函数)
子集找不到,或者是undefined,(有没有var,或者函数申明)都会找参数,简单类型修改了不会影响父级,复合类型修改了会影响父级,除非重新赋址了。

----------------------------------------------------------------------------------------
/*全局作用域
    1.变量提升:先找var 和函数申明
     var a = undefined
     fn = function fn(){...}
    2.从上而下逐行解读代码:只看 = 号后面的
     */
    console.log(fn);  //fn = function fn(){...}
    var a = 5;
    console.log(a);//5

    function fn() {
        /*局部作用域
        1.变量提升:先找var 和函数申明
         var a = undefined
         var fn = undefined
         fn = function fn(){alert(1);}
         (重名了,函数 覆盖了 var)
        2.从上而下逐行解读代码:只看 = 号后面的
         */
        fn = 30;
        console.log(fn); //30
        var fn = function () {
            alert(1);
        };
        a = 50;
        console.log(fn, a); //function(){alert(1);},50
        function fn() {
            alert(5);
        }
        console.log(fn); //function(){alert(1);}  (解读的时候看 = 等号,有等号赋值后就看等号后面的)
        var a = fn = 70;//相当于var了一个a = 70   和赋值了一个  fn = 70
        console.log(a, fn); //70,70
        //window.fn = 70;
        window.a = 80
    }
    fn();
    console.log(a, fn); //80,整个大的代码块 (没有参数,看函数体内有没有var fn  和fn的函数声明。有,函数体内形参私有作用域,里边的fn改变了,不会影响外面的fn,除非是挂在window下,比如window.a = 80)
-----------------------------------------------------------------------------------------
function b(x, y, a) {
        console.log(a);//3  先找本身有没有,本身找不到,会找参数有没有,再找父级,找到全局。为止,全没有就报错。
        arguments[2] = 10;//相当于 a = 10
        console.log(a);//10  本身找的到,,就不会往外找
        //return x
    }
    a = b(1, 2, 3);
    console.log(a);//a,拿到时是函数b的默认返回值,(undefined)
----------------------------------------------------------------------
    var foo = 1;
    function bar() {
        if(!foo)
        {
            var foo = 10;
        }
        console.log(foo); 
    }
    bar();//   10


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值