Javascript 将变量注入函数的作用域

Javascript 将变量注入函数的作用域,javascript,variables,scope,Javascript,Variables,Scope,下面的函数接受一个对象并返回一个函数。它返回的函数是接受回调函数的高阶函数 const deconstruct=函数(对象){ 常量声明=Object.entries(Object).reduce(函数(字符串,条目){ 常量键=条目[0]; 常量值=条目[1]; 常量声明=“常量”+键+”=“+值+”;”; 返回字符串+声明; }, ""); const execute=函数(回调){ 返回函数( 声明 +“返回” +callback.toString() + "();" )(); }; 返回

下面的函数接受一个对象并返回一个函数。它返回的函数是接受回调函数的高阶函数

const deconstruct=函数(对象){
常量声明=Object.entries(Object).reduce(函数(字符串,条目){
常量键=条目[0];
常量值=条目[1];
常量声明=“常量”+键+”=“+值+”;”;
返回字符串+声明;
}, "");
const execute=函数(回调){
返回函数(
声明
+“返回”
+callback.toString()
+ "();"
)();
};
返回执行;
};
execute
通过将其作为新函数的一部分来增强
callback
。新函数声明常量,运行
回调
并返回结果。因为在新函数中声明的常量和
回调
在同一范围内,
回调
可以访问这些常量,从而有效地将这些常量注入
回调
的范围。下面是调用
解构
的示例

解构({
答:0,,
b:1,
c:2
})(功能(){
console.log(a,b,c);//0 1 2
});

但是,有没有一种不同的方法可以像我的代码那样不使用中间字符串而将变量注入函数的作用域呢?

根据您在问题中修改的信息,我现在明白了,这样做的目的是让它保持干燥(不要重复)。目标是避免不必要地重复(a,b,c),想象可能有数百个属性

这里有一个策略。您可以使用
with
语句将
this
引入范围,并将对象绑定到函数

value={a:0,b:1,c:2};
函数foo(){
(这个){
控制台日志(a、b、c);
}
}
foo.apply(值);
//或
设bar=foo.bind(值);

bar()我想你的意思是解构(回调,…outArgs){return(函数(inArgs){callback(inArgs)})(outArgs);}
请问你为什么要这样做?使用这个时,似乎很难弄清楚哪些变量是定义的,哪些变量不是定义的。我想知道为什么
({a,b,c})=>console.log(a,b,c)
对你来说不够好。@Khauri我不知道。我只是在回答别人的问题,这就是我的答案。我只是想知道有没有什么办法可以改进它。这里是原始问题的链接:您的解决方案的问题是,由于您实际上是在重新定义函数,并且函数的范围是在创建函数时确定的,因此最终会丢失原始函数的范围。您只维护您定义的全局范围和新范围。谢谢!这比我的解决方案好。虽然我没有使用with,因为原始问题的OP说他们希望看到没有它的版本,但我想没有它我也无能为力。他们的问题不是一个实际问题,而是一个思考练习。我想这是最好的了。选择你的答案!非常感谢你的帮助