美文网首页
变量提升

变量提升

作者: newway_001 | 来源:发表于2019-02-25 19:56 被阅读0次
    a()
    var a = c = function() {
        console.log(2)
    }
    //a is not a function
    
    
    a()//2
    function a(){// 函数声明 脚本在执行之前会做预编译处理
        console.log(2)
    }
    

    会预编译函数,对于变量,只会分配一个内存空间,不会初始化,初始化过程中会在执行时执行。

    var a = c = function() {
        console.log(2)
    }
    a()
    function a() {
        console.log(1)
    }
    a();
    //2
    //2
    

    函数表达式覆盖掉了函数声明。

     var a=10;
        function fn(a,b){
            console.log(a)//function a(){}   这里输出function a(){}, 不是参数a的值,哈哈
            var a=10;
            console.log(a)//10
            function a(){}
            console.log(a)//10
        }
        fn(15);
    
    

    对于函数而言,形参 < 函数声明,所以,第一个是输出a函数,而不是15

    函数预编译相当于把函数放在环境最上方,重新定义a=10,更改了a的值

        a();//1
        var a = c = function() {
            console.log(2)
        };
        a();//2
    
        function a() {
            console.log(1)
        }
        a();//2
        (function(b) {
            b();//2    a传递给形参b,
            c();//2    自由变量c
            var b = c = function a() {
                console.log(3)
            }//重新定义
            b()//3
        })(a);//走到这里 a已经被赋值表达式重新赋值
        c();//3 自由变量被改变
    
    function fn(){
            function a(){console.log(1)}
            return a;
            function a(){console.log(2)}
        }
        fn()();//2 由于预编译,2个function提到最前面
    
    

    相关文章

      网友评论

          本文标题:变量提升

          本文链接:https://www.haomeiwen.com/subject/eyugyqtx.html