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