预编译

    /**
     * 函数声明整体提升
     */
    test() //aa
    function test() {
        console.log("aa")
    }
    /**
     * 变量声明 变量提升(赋值不提升
     */
    var a = 123;
    console.log(a) //123

    console.log(a); //undefined
    var a  =  123

    console.log(a) //undefined
    console.log(b) //报错 b is not defined
   var a = b = 123;
   console.log(a) //123
   console.log(b) //123
    /**
     * 123赋值给b,声明a,然后b赋值给a
     * 所以b是未声明变量,所以是全局的 window.b
     */
    function test() {
        var a = b = 123;
    }
    function abc() {
        console.log(b)
    }
    test()
    abc() //123
    /**
     * 预编译
     * 创建AO对象
     * 找形参和变量声明,将变量和形参名作为AO对象属性名,值为undefined
     * 将实参值与形参统一
     * 在函数体里找函数声明
     */
    /**
     * 例子
     * @param a
     */
    第一步与第二步  AO{
        a:undefined
        b:undefined
    }
    第三步 将实参与形参的值相统一
    AO{
       a:1
       b:undefined
      }
    第四步 在函数体里找函数声明
    AO{
       a:function a(){}
       b:undefined  //b不赋值是因为b是函数表达式不是函数声明
      }

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

    function test(a,b) {
        console.log(a) //1
        c = 0;
        var c ;
        a = 3;
        b= 2;
        console.log(b) //2
        function b() {

        }
        console.log(b); //2
    }
    test(1)

    function test(a,b) {
        console.log(a) //function
        console.log(b) //undefined
        var b = 234
        console.log(b) //234
        a=123;
        console.log(a) //123
        function a() {

        }
        var a;
        b=234
        var b = function () {

        }
        console.log(b) //function
    }
    test(1)

    console.log(test) //function
function test(test) {
        console.log(test) //function
        var test = 234;
        console.log(test) //234
        function test() {

        }
    }
    test(1)
    var test = 123;

    console.log(bar())
    function bar() {
        foo = 10;
        function foo() {

        }
        var foo = 11;
        return foo    //return 就可以看成是console.log(foo)
    }



    if(11+"11"*2==33){
        document.write("基础扎实")
    }
    !!" "+!!"" - !!false||document.write("是猪")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值