js预解析

1.js代码是由浏览器中的js解释器来执行的,js解析器在运行js代码时分为两步:预解析和代码执行
(a)预解析:就是js引擎会将js里面所有的 var 、function 提升到当前作用域的最前面。
(b)代码执行:代码按照顺序来执行
2.预解析又分为:变量预解析(变量提升)和 函数预解析(函数提升)
(a)变量提升:将所有的变量声明提升到当前的作用域最前面,不提升赋值操作。
(b)函数提升:将所有的函数声明提升到当前作用域的最前面 ,不调用函数

具体案例如下,可能看完上面的定义仍一头雾水,但看完下面的案例你会恍然大悟。

    <script>
        console.log(a); //结果为:undefined
        var a=10;
        // 相当于执行了以下代码:
        var a;
        console.log(a); //a没有赋值,所以结果为undefined
        a=10;


        b();
        function b(){
            console.log('今天天气真不错');
        }
        // 相当于执行了以下代码
        function b(){
            console.log('今天天气真不错');
        }
        b(); //所以能正确打印


        c();     //报错
        var c=function(){
            console.log('早上好');
        }
        //相当于执行了以下代码:
        var c;
        c();//该方法未定义
        c=function(){
            console.log('早上好');
        }

	 var foo = function(x,y){
            return x-y;
        };
        function foo(x,y){
            return x+y;
        }
        var num = foo(1,2);
        console.log(num);     结果为:-1
             
        // 该代码相当于执行了以下操作
        // var foo;
        // function foo(x,y){
        //     return x+y;
        // }
        // var num;
        // foo = function(x,y){
        //     return x-y;
        // };
        // num = foo(1,2);
        // console.log(num);
    </script>

易踩的坑
var a=b=c=9 相当于var a=9;b=9;c=9,只有a被声明了var。

 <script>
        f1();
        console.log(c);
        console.log(b);
        console.log(a);
        function f1(){
            var a=b=c=9; //相当于 var a=9;b=9;c=9
            console.log(a);
            console.log(b);
            console.log(c);
        }

        // 以上代码相当于执行了以下代码
        function f1(){
            var a;
            a=b=c=9;  // b,c 是全局变量
            console.log(a);
            console.log(b);
            console.log(c);
        }
        f1();
        console.log(c);
        console.log(b);
        console.log(a);
    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值