javascript复习之预解析

本文探讨了JavaScript中变量和函数的提升现象,通过多个示例展示了如何在代码执行前进行声明和定义。案例分析了var和function声明在当前作用域的提升行为,解释了未声明变量在不同情况下的全局和局部作用。同时,提到了变量赋值的顺序对作用域的影响,并通过一个具体的案例说明了变量提升可能导致的错误和理解陷阱。
摘要由CSDN通过智能技术生成

JavaScript解析器在执行代码前会将var和function声明的变量在内存中提前声明或定义,函数和变量都是在当前作用域进行提升的。

要是你有一些基础的情况,以下案例是可以自行说出来的,再复制到编辑器中求证:

		// 练习
        // alert(a);
        // var a = 1;
        // alert(a)
        // function a() {
        //     return false;
        // }

        // 案例1
        // var num = 10;
        // fun();
        // function fun() {
        //     console.log(num);
        //     var num = 20;
        // }

        // console.log(num)

        // 案例2
        // var num = 10;
        // function fn() {
        //     console.log(num);
        //     var num = 20;
        //     console.log(num);
        // }
        // fn();

        // 案例3
        // var a = 18;
        // f1();
        // function f1() {
        //     var b = 9;
        //     console.log(a);
        //     console.log(b);
        //     var a = '123';
        // }

有个很有意思的案例:

		// 案例4
        f1();
        console.log(c);
        console.log(b);
        console.log(a);
        function f1() {
            var a = b = c = 9;
            console.log(a);
            console.log(b);
            console.log(c);
        }

我的想法:f1()是会执行的,依次输出9,9,9 ;但在函数外输出c,b,a是会报错的;
真正执行结果是:
9
9
9
9
9
Uncaught ReferenceError:a is not defined

还原一下代码,应该这样的的情况:

(function () { var e = 1; })()
console.log(e);//报错,e is not defined

(function() { f = 2;})()
console.log(f);//2

//也就是说 var a=b=c=9 应该是 c=9;b=c;var a=b;  b和c是没有var声明的,所以会是全局变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值