javascript - JavaScript 中使用内联函数的闭包

标签 javascript scope closures

可以说,我定义了一个类似的函数

var f = function(cb){cb()};

现在,如果我传递回调函数,它将起作用:

f(()=>{console.log("ccb")});//打印:ccb

但是如果我传递一个参数,在这种情况下 x 将是未定义的:

f((x)=>{console.log("x:"+x);});//x 将是未定义的

所以一种解决方案是使用闭包,

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 内的回调甚至没有被调用。 为什么?我们如何使用这个内联函数来使其工作?我正在研究闭包,所以想了解这一点。如有任何帮助,我们将不胜感激。

最佳答案

在您的代码中,您没有使用 xx 调用内联函数。您只需将内联函数传递给 f ,它将被执行,但不会打印任何内容,因为被调用的内联函数只是返回另一个函数,而该函数永远不会被调用。

var f = function(cb){cb()};
var xx = 20;
f((function(xx){
    return function(){
        console.log("xxx: "+xx)
    }
})(xx));

关于javascript - JavaScript 中使用内联函数的闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59930513/

相关文章:

javascript - Chrome devtools 控制台不显示关闭

swift - 嵌套闭包中的方法参数

javascript - 通过 Apache 和 Tomcat 的 WebSocket 500 错误 : java. lang.UnsupportedOperationException:此协议(protocol)不支持 HTTP 升级

javascript - 如何停止在 Electron 应用程序上创建空日志目录

javascript - 替换$.ajax?

java - 标有原型(prototype)范围的 Bean 在 Spring 中不起作用

javascript - 在 Angular Directive(指令)、服务和 Controller 之间共享数据

自执行 block 中的 Javascript 函数无法访问。为什么?

javascript - 闭包中变量的性能与函数参数

groovy - 闭包 "directive"是什么以及有什么用