goldEli / Front-End-Training

Front End Training
2 stars 5 forks source link

JS预编译 #42

Open lurasso opened 4 years ago

lurasso commented 4 years ago

什么是JS预编译?

以下代码输出结果为?

function fn(a){
            console.log(a);
            var a = 123;
            console.log(a);
            console.log(b);
            function a(){}
            console.log(a);
            var b = function(){}
            console.log(b);
            function d(){}
        }
        fn(1);
goldEli commented 4 years ago

预编译发生在js代码执行前(大部分是函数体执行),在内存中开辟一部分空间存放参数、变量和函数。 输出: function a(){} 123 123 undefined function(){}

再确认下运行结果

lurasso commented 4 years ago

预编译发生在js代码执行前(大部分是函数体执行),在内存中开辟一部分空间存放参数、变量和函数。 输出: function a(){} 123 undefined 123 function(){}

748580573 commented 4 years ago

js在代码编译阶段,会将变量申明与函数声明提升,上面的代码最后会变成这样

function fn(a){
            var a;
            var b;
            function a(){}
            function d(){}
            console.log(a);
            a = 123;
            console.log(a);
            console.log(b);

            console.log(a);
             b = function(){}
            console.log(b);

        }
        fn(1);

输出结果为

function a(){}
123
undefined
123
function(){}