JavaScript基础学习 预解析

JavaScript基础学习 预解析

预解析

<!DOCTYPE html>
<html>

<head>
    <title>js开始学习</title>
    <script>
        //js引擎运行js 分为两步: 预解析  代码执行
        //预解析  js引擎会把js里面所有的var还有function提升到当前作用域的最前面
        //   代码执行  按照代书写的顺序从上往下执行

        //预解析分为  变量预解析(变量提升)和函数预解析(函数提升)


        //变量提升  就是把所有的变量提升到当前的作用域最前面  不提升赋值操作
        //变量例子: 
        console.log(num); //undefined   
        var num = 10;


        fun(); //  报错
        var fun = function() {
            console.log('6666666');
        }

        //相当于执行了以下代码
        // var fun;
        // fun();
        // fun = function() {
        //     console.log('66666666');
        // }


        //函数提升  就是把所有的函数声明提升到当前作用域的最前面  不调用
        //函数例子:
        function fn() {
            console.log('这是正确的,不会出问题');
        }
        fn();
    </script>

</head>

<body>

</body>

</html>

预解析案例

<!DOCTYPE html>
<html>

<head>
    <title>js开始学习</title>
    <script>
        //预解析案例(1)
        var num = 100;
        fun();

        function fun() {
            console.log(num);
            var num = 99;
        }
        console.log('-----------------------------');

        // 以上的代码是按照下面的顺序执行的
        var num;

        function fun() {
            var num;
            console.log(num);
            num = 99;
        }
        num = 100;
        fun(); //输出结果是undefined

        console.log('-----------------------------1');



        //预解析案例(2)
        var num = 10;

        function f2n() {
            console.log(num);
            var num = 20;
            console.log(num);
        }
        f2n();

        // 以上的代码是按照下面的顺序执行的
        var num;

        function f2n() {
            var num;
            console.log(num);
            num = 20;
            console.log(num);
        }
        num = 10;
        f2n();
        //第一个输出结果是undefined
        //第二个输出结果是20


        console.log('-----------------------------2');

        //预解析案例(3)
        var a = 18;
        f3();

        function f3() {
            var b = 9;
            console.log(a);
            console.log(b);
            var a = '123';
        }

        // 以上的代码是按照下面的顺序执行的
        var a;

        function f3() {
            var b;
            var a;
            b = 9;
            console.log(a);
            console.log(b);
            a = '123';
        }
        a = 18;
        f3();
        //a输出结果是undefined
        //b输出结果是9

        console.log('-----------------------------3');

        //预解析案例(4)

        // f4();
        // console.log(c);
        // console.log(b);
        // console.log(d);


        // function f4() {
        //     var d = b = c = 9; // 相当于var a=9;  b=9;  c=9;  b和c只进行了赋值并没有声明,因此是全局变量
        //     console.log(d);
        //     console.log(b);
        //     console.log(c);
        // }

        //输出结果: 直接报错 这种顺序d没有定义


        // 以上的代码是按照下面的顺序执行的

        function f4() {
            var d;
            d = b = c = 9;
            console.log(d);
            console.log(b);
            console.log(c);
        }
        f4();
        console.log(c);
        console.log(b);
        console.log(d);

        输出结果: 9, 9, 9, 9, 9, 报错

        console.log('-----------------------------4');
    </script>

</head>

<body>

</body>

</html>

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值