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

请问以下代码执行后为什么会报错(a is not defined);

请问以下代码执行后为什么会报错(a is not defined);

慕田峪8701529 2017-11-10 09:32:29
bbb();function bbb () { var a = 5; aaa();//这样会报错:a is not defined(function aaa(){    //写成这样就不会报错,为什么? alert(a); })();}function aaa () { alert(a);}
查看完整描述

3 回答

?
落叶1111

TA贡献57条经验 获得超9个赞

a的上下文环境在b函数中,alert(a)取得是全局的a,所以取不到

查看完整回答
反对 回复 2017-11-10
?
HOTLINE

TA贡献33条经验 获得超23个赞

作用域的问题吧

在bbb的外面创建函数 alert (a) 此时的 a 指的是 window 上的 a  , 但是在window上并没有声明 a 所以 a is not defined;


但是你在bbb内部自执行 aaa 方法 ,此时存在一个作用域链 , 在 aaa 方法里没有 a , 但是在他的外面 也就是 bbb有a 所以此时的a就是5


查看完整回答
反对 回复 2017-11-10
  • 慕田峪8701529
    慕田峪8701529
    谢谢回复,其实我就是想问,为什么在bbb函数里面直接写成aaa()却不能,而同样写在bbb函数里,写成立即执行的形式就可以。。。
  • HOTLINE
    HOTLINE
    作用域的问题,在预编译的时候作用域已经定好了 。 具体我也不是能讲很清楚。 aaa 在外面定义 时 是 window到 aaa 方法里 在bbb里面调用aaa时 aaa任然是从自己的方法里找变量 没有找到再到 window里面找 在bbb里定义时 window bbb aaa 自执行aaa 在本身的作用域 拿不到 找父级 也就是 bbb作用域
  • HOTLINE
    HOTLINE
    我已经尽我最大的能力了?
  • 3 回答
  • 0 关注
  • 2326 浏览
慕课专栏
更多

添加回答

举报

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