预解析-基础知识总结------彭记(010)

预解析

-系统会将function定义的函数提升到当前作用域最顶端

-还会将var的声明提升到当前作用域的最顶端

 

<script>
    /*test();
    function test(){
        console.log(123);
    }
    /!*系统会将function定义的函数提升到当前作用域最顶端*!/
    function test(){
        console.log(123);
    }
    test();*/

    /*console.log(age);
    var age = 20;*/
    /*系统还会将var的声明提升到当前作用域的最顶端*/
    /*var age;
    console.log(age);
    age = 20;*/

//test();//456
    /*1.函数同名的时候,后面声明的函数会将前面声明的函数覆盖*/
    /*function test(){
        console.log(123);
    }
    function test(){
        console.log(456);
    }*/

    /*2.变量和函数同名   
    /*alert(foo);//function foo(){}

    function foo(){}
    var foo = 2;

    function foo(){}  //var foo = function(){}
    var foo;
    alert(foo)//2
    foo=2*/
   
 /*function foo() {
        /!*函数内部的变量名提升只会提升到当前函数的最顶端*!/
        var num = 123;
        console.log(num); // 123
    }
    foo();
    /!*函数外部不能直接使用函数内部声明的成员*!/
    console.log(num); // is not defined*/


    /*var scope = "global";
    function foo() {
        console.log(scope); //undefined
        var scope = "local";
        console.log(scope); //local
    }
    foo();*/
    /*---------*/
    /*function foo() {
        /!*如果函数内部有某个成员,就会优先使用内部的成员,如果没有再使用外部声明的成员*!/
        var scope;
        console.log(scope); //undefined
        scope = "local";
        console.log(scope); // local
    }
    var scope;
    scope = "global";
    foo();*/

/*var num = 123;
    function f1(num) { // 参数理解为:函数内部的一个变量
        var num =456;
        console.log(num); //456
    }

 /*函数表达式并不会被提升:因为函数是其中的值--相当于赋值操作*/
    /*test();
     var test = function(){
     console.log(123);
     }*/

    console.log(typeof ksdjgfyadsgfyj); //undefined
    /*条件表达式中的函数声明不会提升*/
    console.log(typeof func);
    if(true){
        function func(){
            return 1;
        }
    }
    console.log(typeof func);

</script>

综合变态面试题:

 

<script>
    function Foo() {
        getName = function(){ alert(1); };
        return this;
    }

    Foo.getName = function() { alert(2); };
    Foo.prototype.getName = function(){ alert(3); };

    function getName(){ alert(5); }
    var getName;
    getName = function() { alert(4); };


    /*构造函数的静态成员*/
    Foo.getName(); // 2
    getName(); // 4
    /*将构造函数当成普通函数调用:this就是当前window对象  Foo().getName(); 》》 this.getName()*/
    Foo().getName(); // 1
    /*构造函数中将这个全局的成员重置了*/
    getName(); // 1
    console.log(new Foo.getName()); // 2
    /*先创建对象,再使用对象调用函数*/
    new Foo().getName(); // 3

    console.log(new new Foo().getName()); //3

</script>

 

posted @ 2017-08-15 11:03  依旧安好  阅读(147)  评论(0编辑  收藏  举报