Javascript 封闭及;解构—;解构函数可以';你不给对方打电话吗?

Javascript 封闭及;解构—;解构函数可以';你不给对方打电话吗?,javascript,ecmascript-6,closures,destructuring,Javascript,Ecmascript 6,Closures,Destructuring,我有如下几点: let MM = { a: function(){ b(); }, b: function(){ console.log('b'); } }; function makeClosure(M) { let { a, b } = M; function a2(){ b2() }; function b2(){ console.log('b2'); }; return function

我有如下几点:

let MM = {
    a: function(){
        b();
    },
    b: function(){
        console.log('b');
    }
};

function makeClosure(M) {
    let { a, b } = M;

    function a2(){ b2() };
    function b2(){ console.log('b2'); };

    return function( arg ){
        if ( arg === 1 ) a();
        if ( arg === 2 ) a2();
    }
}

let c = makeClosure( MM );

////////////////////////////////////////////
// RESULTS

c( 1 ); // b() doesn't exist
c( 2 ); // b2() exists just fine
设MM={
a:函数(){
b();
},
b:函数(){
console.log('b');
}
};
函数makeClosure(M){
设{a,b}=M;
函数a2(){b2()};
函数b2(){console.log('b2');};
返回函数(arg){
如果(arg==1)a();
如果(arg==2)a2();
}
}
设c=最大闭合(MM);
////////////////////////////////////////////
//结果
c(1);//b()不存在

c(2);//b2()存在得很好
MM.a
的词法范围内没有名为
b
的独立函数,因此从
makeClosure
调用
a()
会导致错误,因为在
MM
中的
a
函数中找不到名为
b
的变量或函数

一种可能是将要执行的函数传递给
a
,这样
MM
就不依赖于任何外部变量:

设MM={
a:功能(someFn){
someFn();
},
b:函数(){
console.log('b');
}
};
函数makeClosure(M){
设{a,b}=M;
函数a2(){b2()};
函数b2(){console.log('b2');};
返回函数(arg){
如果(arg==1)a(b);
如果(arg==2)a2();
}
}
设c=最大闭合(MM);
c(1);

c(2)我认为我基于解构的定义方面假设了太多。我想我真正想要的是某种导入方法的方式,就像它们是在那一行定义的一样。谢谢你把它清理干净。当答案帮助你时,考虑把它标记为接受,以表明问题已经解决。