代码预解析

本文详细介绍了JavaScript中的预解析机制,包括函数声明和变量声明的提升。讲解了预解析如何影响同名函数和变量的处理,并通过示例解释了预解析在if语句和return语句中的行为。此外,还探讨了函数作用域和变量作用域的概念,帮助读者深入理解JavaScript执行上下文的关键点。
摘要由CSDN通过智能技术生成

标题代码预解析

预解析

        javascript源代码   ->   浏览器加载执行  -> 输出结果 
                           |
                          预解析
                        1. 声明式函数提到代码最上面
                        2. var 声明的变量提到代码最上面

     -->
</head>
<body>
    <script>

        fn()
        console.log('f1 ',f );
        function fn(){
            console.log('fn >>>')
        }

        var f = 100

        console.log('f2 ',f );


        // function fn(){
        //     console.log('fn >>>')
        // }
        // var f
        // fn()
        // f = 100

 <!-- 
        当遇到同名函数和变量时
          => 预解析优先处理函数


     -->
</head>
<body>
    <script>

        fn()
        function fn(){
            console.log('fn >>>');
        }
        fn()
        var fn = 100
        fn()

        // function fn(){
        //     console.log('fn >>>');
        // }
        // var fn

        // fn() // 函数调用语句
        // fn()
        // fn = 100 // 变量赋值
        // fn()  // fn 不是一个函数



if语句块不管条件是否满足都会执行预解析
 console.log('num 11', num);
        if (3 > 5) {
            var num = 100
        }
        console.log('num 22 ', num);

return语句后的代码也会预解析

function fn() {
            console.log(num) // num is not defined
            if (true) {
                return
            }
            var num = 100
            console.log(num)
        }

        fn()

练习

 console.log(num)
        var num = 10
        f()
        console.log(f2)

        function f() {
            console.log(n)
            var n = 20
            console.log(n)
        }
        console.log(num)
        var f2 = function () {
            console.log('我是f2')
        }

        // var num
        // var n
        // var f2

        // function f() {
        //     console.log(n) // undefined
        //     n = 20   
        //     console.log(n)  //20
        // }

        // //----------------------
        // console.log(num)  //undefined
        // num = 10  
        // f()
        // console.log(f2) //undefined
        // console.log(num) // 10
        // f2 = function () {
        //     console.log('我是f2')
        // }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值