猿问

js变量提升

ES5中,JavaScript只能通过函数来创建词法作用域(不是动态作用域)

词法作用域就是代码写完,作用域就已经构建好了,如下面的案例一

案例一

var num = 10;

function test(){

    console.log(num);

}


function test1(){

    var num = 100;

    test();

}

    

test1(); // 10

案例二中该怎么解释一定要执行test()才不会报错呢,不是应该像案例一那样在函数执行前就已经进行了变量提升了吗

案例二

console.log(a);


function test() {

     a = 1;

}

test(); // 必须执行才能打印undefined 否则报错 


撒科打诨
浏览 385回答 1
1回答

一只斗牛犬

案例二你可以这么理解://因提升所以test函数置顶function test() {a = 1;}//但是此时还没调用test,所以a还没赋值console.log(a);//err//接着才执行test(),此时a才赋值,但是该行为为赋值而不是声明;test();//a为1
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答