有这么一组题目看得我是目瞪口呆:
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
和我的理解不一样,求大佬解释一下
你也没说你怎么理解的啊....
这些属于比较基础的知识,楼主可以先去看看书,比如js高程,自然就理解了。
两个概念:作用域链以及声明提升,这里以第一个例子为例:
在创建funtest函数作用域的时候,var 声明的变量 var01提升到了该作用域顶部,声明和赋值是两个过程:
代码变成了:
再讲作用域链,在读到var01这个变量的时候,沿着作用域链逐级向上回溯,在函数作用域中已经有了var01这个变量了,好了回溯停止不找了,在打印的时候,还没有进行赋值,所以undefined