前端第一周,Javascript--预解析-变量和函数的提升

本文详细解释了JavaScript中变量提升、函数提升以及赋值式函数的原理,强调了预编译和预解析的区别,以及它们对代码执行的影响。

        //(1)变量提升:

        //变量的提升只会提升声明部分,不提升阈值

        //var a;

        //var b;

        console.log(a);//undefined

        console.log(b);//undefined

        //console.log(c);//Error: c is not defined

        //Error: c is not defined(c没有定义变量)这个结果意味着,在没有(var)声明之前访问会报错,只有用var关键字声明才会提升!!


 

        //(2)声明函数提升:

        console.log(fn1); //这样就提升了整个函数体:ƒ fn1(){ console.log('fn1函数被调用了'); }

   

        //(3)赋值式函数提升:

        //赋值式函数就是按照变量的提升规则进行提升的,

        //只提升(var)声明部分,所以结果就是undefined不是函数。

        //var fn2;

        console.log(fn2);//undefined

        fn2();//Error: fn2 is not a function

      A.预编码:

            浏览器帮我们做,所做的事情就是基本的语法检查,除了给我们报错时,看不见摸不着

        B.预解析:

            浏览器帮我们做,负责将所有使用var声明的变量和定义的函数进行提升操作

        C.执行代码:

            从上往下执行代码,逐条执行

        !注意:

          如果遇到函数,不会立马执行函数

          而是在函数被调用后,再在函数内部进行:预编译---预解析---执行阶段。 

 // 1.变量提升:

        //会所有使用var关键字声明的变量提升到当前作用域的最顶端,

        //但是对于变量只会提升声明部分,而不会提升赋值部分。

        var a = 11;

        console.log(a);//11

        var b = 12;

        console.log(b);//12

        c = 13;

        console.log(c);//13


 

        //2.函数的提升:

        //将整个函数全部提升到当前作用域的最顶端,仅限声明式函数,所以可以在任意位置调用声明式函数!!

        function fn1() {

            var d;

            console.log(d);//undefined

            console.log('fn1函数被调用了');

            var d = 14;

            console.log(d);//14

        }

        fn1();


 

        //3.赋值式函数:

        //就是按照变量的提升规则进行提升

        var fn2 = function () {

            console.log('fn2我被函数调用了')

        }

        fn2();

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值