ES5中,JavaScript只能通过函数来创建词法作用域(不是动态作用域)词法作用域就是代码写完,作用域就已经构建好了,如下面的案例一案例一varnum=10;functiontest(){console.log(num);}functiontest1(){varnum=100;test();}test1();//10案例二中该怎么解释一定要执行test()才不会报错呢,不是应该像案例一那样在函数执行前就已经进行了变量提升了吗案例二console.log(a);functiontest(){a=1;}test();//必须执行才能打印undefined否则报错
2 回答
HUWWW
TA贡献1874条经验 获得超12个赞
案例二你可以这么理解://因提升所以test函数置顶functiontest(){a=1;}//但是此时还没调用test,所以a还没赋值console.log(a);//err//接着才执行test(),此时a才赋值,但是该行为为赋值而不是声明;test();//a为1
添加回答
举报
0/150
提交
取消