为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

斯蒂芬大帝 2018-09-23 21:47:28
有这么一组题目看得我是目瞪口呆: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


查看完整回答
反对 回复 2018-09-23
  • 1 回答
  • 0 关注
  • 520 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信