账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    一个关于作用域的问题
    44
    0
    let foo = () => {
      let a = 111;
      return {
        fn: function() {
          console.log(this);
          a = 222;
        },
        num: function() {
          console.log(this);
          console.log(a);
        }
      };
    };
    let ins = foo();
    ins.fn();
    ins.num();  // 222

    能否有高手能解答一下,为什么num方法能够访问到fn方法内的变量a?

    我自己的思路是,首先执行fn方法,则在fn方法中存在一个值为222的变量a;然后执行num方法,函数体中要输出变量a,首先在num方法当前作用域中寻找,没有找到,然后在上一级作用域foo内找,找到变量a,返回输出111。

    可是实践后,返回222,这是什么原因呢?

    猜测:按照之前的推理,fn中的变量a覆盖了foo中的变量a,可是找不到理由解释fn中的变量a覆盖foo中的变量a。fn中的变量a不是应该只存在于fn方法中么,为什么可以覆盖?

    希望有知道输出222原因的伙伴指点一下,感激不尽!

    2
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • n1爱wo 普通会员 1楼
      502 Bad Gateway

      502 Bad Gateway


      nginx
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部