Javascript 函数闭包

Javascript 函数闭包,javascript,function,closures,Javascript,Function,Closures,您好,我正在尝试运行以下函数: function add (a, b) { return a + b; } var make_lazy = function (add, a, b) { return function () { add(a,b); } } 基本上,我要做的是将另一个函数作为参数传递给make_lazy函数,然后运行作为参数传递的函数以及其他两个参数。当我尝试运行代码时,未定义的函数不是错

您好,我正在尝试运行以下函数:

   function add (a, b) {
    return a + b;
    }



 var make_lazy = function (add, a, b) {

        return function () {

        add(a,b);

        }
    }

基本上,我要做的是将另一个函数作为参数传递给make_lazy函数,然后运行作为参数传递的函数以及其他两个参数。当我尝试运行代码时,未定义的函数不是错误

我想你是在尝试这样的事情

function add (a, b) {
   return a + b;
}



 var make_lazy = function (a, b) {

    return function () {

       return add(a,b);

    }
}

然后您可以调用
var lazy=make_lazy(3,5)
然后调用
lazy()
获取8

您忘记了匿名函数中的
return
语句,该语句是从make\u lazy返回的:

var make_lazy = function (add, a, b) {
   return function () {
    return add(a,b) // <----- here
  }
}
var make_lazy=函数(添加、a、b){
返回函数(){

return add(a,b)//将惰性函数体包装在自调用函数中并返回

function add (a, b) {
       return a + b;
    }

    var make_lazy = function (add, a, b) {
        return (function () {
          add(a,b);
        })();
    }

这是我的观点

当您为make_lazy变量分配函数时,在此之后,您应该使用与该函数定义中相同的参数调用make_lazy():

make_lazy(function expression, a, b);
这部分:

function (add, a, b)
只是使add成为一个局部变量,这与上面定义的add(a,b)不同

要使代码正常工作,请尝试调用make_lazy作为

make_lazy(add, 3, 4)

我想你错过了主要问题(见我的答案)。但是如果你只想通过
add
,那就真的很傻了。我不明白。你没有看到问题中的return关键字make_lazy function吗?你没有理解创建一个lazy function的意义。这意味着他只想在必须的情况下运行它。大概是“add”函数就是一个例子,在他的真实代码中,它要昂贵得多。