函数闭包

Function closures

您好,我正在尝试 运行 以下功能:

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



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

        return function () {

        add(a,b);

        }
    }

基本上我要做的是将另一个函数作为参数及其参数传递给 make_lazy 函数 - 然后 运行 作为参数传入的函数与其他两个参数。当我尝试 运行 代码时,我得到 undefined is not function 作为错误。

我认为你正在尝试这样的事情。

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

您忘记了从 make_lazy 返回的匿名函数中的 return 语句:

var make_lazy = function (add, a, b) {
   return function () {
    return add(a,b) // <----- here
  }
}

将你的惰性函数体包裹在一个自调用函数中 return。

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)