JS闭包相关 闭包内创建的对象如何获取?

我用一个全局对象,新建其一个属性来引用闭包内创建的对象


function fun(){

    return function(){

        var obj1={

            a:1,

            b:2

        };

        obj2.item=obj1;

    }

}

var obj2={};

fun();

console.log(obj2.item.a);

结果显示 Cannot read property 'a' of undefined

请问这样获取闭包内对象的方式错在哪?闭包内对象会自动释放吗?如果会自动释放,为什么?谢谢


第二个问题


var testButton1=document.getElementById("testButton1");

var testButton2=document.getElementById("testButton2");

testButton1.onclick=fun_1;

testButton2.onclick=fun_2;


function fun_1(){

    

    var obj1={

        a:1,

        b:2

    };

    obj2.item=obj1;

    

}


function fun_2(){

    console.log(obj2.item.a);

}

var obj2={};

结果也显示Cannot read property 'a' of undefined 是为什么


泛舟湖上清波郎朗
浏览 398回答 1
1回答

德玛西亚99

匿名函数没有调用,局部变量调用后失效,闭包可以保持变量在内存中不被回收       function fun(){    return  (function(){        var obj1={            a:1,            b:2        };        obj2.item=obj1;    })();}或者       function fun(){    return  function(){        var obj1={            a:1,            b:2        };        obj2.item=obj1;    };}fun()();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript