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

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

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    函数内局部变量返回后,函数的变量对象还在内存中么?
    67
    0

    对于闭包、return 还有些疑问:

    let v=[];
    
    function temp() {
        let a = [],b=0;
        return a;
    }
    
    let t = temp();

    最后一行代码执行时,temp 函数内会创建一个作用域链,作用域链中有2个变量对象,全局变量对象G和局部变量对象P,那么上面代码执行完后,我想出三个答案:

    理解1:P 没有被销毁,因为 t 保存着对 P 里变量 a 的引用;
    理解2:P 已经被销毁了,但 a 没有被销毁,因为 return 返回 a 的引用,然后解除了对 P 的引用;
    理解3:P 已经被销毁了,但 a 没有被销毁,因为 return 返回 a 的值,然后解除了对 P 的引用;

    我的分析:

    理解1的问题在于:这里仅仅是返回一个引用类型的变量,认为是通过变量对象来引用这个变量,从而导致变量对象没有被销毁,如果机制是这样,不是太耗费资源么,直接返回引用然后销毁变量对象就是了;

    理解2的问题在于:MDN上看到中英文里解释,return 都是返回的是值,并没有说引用,不过如果返回的是对象,就说是引用的话,那是不是意味着变量对象可能没有被销毁或者在返回后才被销毁了?

    我觉得理解3是对的,但不是很确定,请问大家觉得哪个理解是对的?或者上面的理解都不对,有自己的观点?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 情绪低落 普通会员 1楼
      502 Bad Gateway

      502 Bad Gateway


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