【发布时间】:2020-01-27 11:45:05
【问题描述】:
可以说,我已经定义了一个类似的函数
var f = function(cb){cb()};
现在,如果我传递一个回调函数,它将起作用:
f(()=>{console.log("ccb")}); //print: ccb
但是如果我传递一个参数,在这种情况下 x 将是未定义的:
f((x)=>{console.log("x:"+x);}); // x will be undefined
所以一种解决方案是使用闭包,
function cba(x){
return function(){
console.log("ccbbaa:"+x)
}
}
f(cba(20)); //will work give output: ccbbaa:20
但如果我尝试使用 inplace 函数实现闭包,请考虑定义 xx。
var xx = 20;
f(function(xx){
return function(){
console.log("xxx: "+xx)
}
});
甚至不调用 f 内部的回调。 为什么?我们将如何使用这个内联函数来使其工作?我正在研究闭包,所以想了解这一点。任何帮助表示赞赏。
【问题讨论】:
-
您执行带有签名
function(xx)的outer 函数,它返回带有签名function()的新函数,但您从不执行后者。由于它也从未返回,因此您也不能在之后调用它。它刚刚生成并在某些时候被垃圾收集。 -
"f 内部的回调甚至没有被调用。为什么?" — 因为你没有做过什么会调用它。
f()不会对通过调用传递给它的函数获得的返回值做任何事情。 -
@Quentin 我们如何更改它以使其正常工作?
-
@NikhilKumar — 你为一个没有真正明确定义的问题制定了一个非常抽象和破碎的解决方案。很难说如何解决实际问题,因为我们不知道它是什么。您似乎只是想让
f做某事f根本不是设计用来做的,而是通过更改您传递给f的内容来接近它……但无论您传递给f的内容是什么不会改变f的工作方式。
标签: javascript scope closures