JS全局变量和函数作用域变量区别

有这么一组题目看得我是目瞪口呆:

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

和我的理解不一样,求大佬解释一下


斯蒂芬大帝
浏览 521回答 1
1回答

白衣染霜花

你也没说你怎么理解的啊....这些属于比较基础的知识,楼主可以先去看看书,比如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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript