求解:js函数在预编译期间的谜 简单

先看这么一句话:

  “在JS预编译期,仅仅是对函数的名称、函数内部的各种标识符进行检索,并建立索引”


根据上述,我们看看示例:

示例1: 

function test6_2() {

    var a = 123;

    (function() {

        alert(a);  //undefined  预编译时被a标识符替换,故undefined

        var a = 1.11111;

        alert(a); //1.11111

    })();

}

示例2:

function test6_3() {

    var a = 123;

    (function() {

        // function a() {alert("function")}   预编译时,被函数a替换,疑问:在函数a后面继续声明有a变量,不过这个变量似乎优先级不够?

        alert(a); 

        var a = "abc";

        function a() {alert("function")}

        var a = 1.11111;

        alert(a); // 1.11111

    })();

}

示例3:

function test6_4() {

     // function a() {alert(1)}   预编译时,被函数f替换,疑问:在函数f后面继续声明有标识符f,不过这个变量似乎优先级不够?

    alert(f);

    function f() {alert(1)}

    var f = function() {alert(2)};

}

示例4:

function test6() {

    function f() {

        alert(1);

    }

    f();    //4

    var f = new Function("alert(2)");

    f();       //2

    var f = function() {alert(3)};

    f();          //3

    function f() {

        alert(4);

    }

    f();             //3

    var f = new Function("alert(5)");

    f();                //5

    var f = function() {alert(6)};

    f();                   //6

}

备注:继续学习,后期来解答这个疑问!

原文地址:https://www.cnblogs.com/chyong168/p/2256173.html