JavaScript之变量提升

解析器执行JavaScript代码的过程
首先预解析
将变量var和函数function的声明提前到作用域的最上面,需要注意的是变量的赋值操作不会提前,这也叫做变量提升
然后执行代码
从上往下,一行一行执行代码
当执行函数时会进入函数内部
再次预解析
然后从上往下,一行一行执行代码

例如,原本的代码是这样:

<script type="text/javascript">
    var num = 10;
    fun();

    function fun() {
        console.log(num);
        var num = 20;
    }
</script>

预解析之后是这样:

<script type="text/javascript">
    var num;

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

    num = 10;
    fun();
</script>

再比如原本的函数是这样:

<script type="text/javascript">
    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);
    }
</script>

预解析之后是这样:

function f1(){
	var a; //a是局部变量
    a = b = c = 9; //b、c是全局变量
    //var a = b = c = 9; //等同于var a=9; b=9; c=9;
    //var a=9,b=9,c=9; //等同于var a=9; var b=9; var c=9; 
    console.log(a);
    console.log(b);
    console.log(c);
}

f1();
console.log(c);
console.log(b);
console.log(a);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值