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”函数就是一个例子,在他的真实代码中,它要昂贵得多。