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

关于js的问题

关于js的问题

largeQ 2018-08-11 10:09:04
(function(){ a = 5;alert(window.a);var a = 10;alert(a);})();这段代码中a是全局对象,为什么alert(window.a);会显示undefined
查看完整描述

1 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

问题中的代码等于一些以下代码

(function(){
    var a;
    a = 5;
    alert(window.a);
    a = 10;
    alert(a);})()

这一段代码涉及到了变量声明提升
解析器在解析的时候,会把var a = 10;在这个匿名函数里,会被提前为var a;也就是说,会在函数内部一开始就声明这个变量。
如此,a就变成了局部变量,js有一个作用域链的概念,当遇到变量的时候,从自己当前的函数的作用域中开始查找是否声明了此变量,如果有,则使用,若没有,那么去查找包含这个函数的函数中是否存在这个变量,一级一级直到全局。这个过程是一步步执行的,也就是说,若在自己的函数内部找到,那么就不会继续寻找。
所以,当检测到a存在时,就使用它,但是a没有定义,所以undefined。


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

添加回答

举报

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