有这么一组题目看得我是目瞪口呆:var var01 = 1;function funtest() { document.write(var01); var var01 = 0;
}
funtest();//结果为:undefined////////////////////////var var01 = 1;function funtest() { document.write(var01);
var01 = 0;
}
funtest();//结果为:1////////////////////////
var01 = 1;function funtest() { document.write(var01); var var01 = 0;
}
funtest();//结果为:undefined/////////////////////var01 = 1;function funtest() { document.write(var01);
var01 = 0;
}
funtest();//结果为:1和我的理解不一样,求大佬解释一下
1 回答

白衣染霜花
TA贡献1796条经验 获得超10个赞
你也没说你怎么理解的啊....
这些属于比较基础的知识,楼主可以先去看看书,比如js高程,自然就理解了。
两个概念:作用域链以及声明提升,这里以第一个例子为例:
var var01 = 1;function funtest() { document.write(var01); var var01 = 0; } funtest();
在创建funtest函数作用域的时候,var 声明的变量 var01提升到了该作用域顶部,声明和赋值是两个过程:
代码变成了:
var var01;document.write(var01);var01 = 1;
再讲作用域链,在读到var01这个变量的时候,沿着作用域链逐级向上回溯,在函数作用域中已经有了var01这个变量了,好了回溯停止不找了,在打印的时候,还没有进行赋值,所以undefined
添加回答
举报
0/150
提交
取消