我在javascript中理解高阶函数时遇到了一些麻烦。
有人可以向我解释在这两种情况下发生的事情的区别吗?
情景1:
// A function that takes in a number (x) and adds one to it.
function doMath(x){
return function (x){
return x + 1;
}
}
var didMath = doMath(5);
console.log(didMath()); // returns error
var didMath = doMath();
console.log(didMath(5)); // returns 6
var didMath = doMath(100);
console.log(didMath(5)); // still returns 6
情景2:
function doMath2(x,callback){
return callback(x);
}
function add(x){
return x + 1;
}
console.log(doMath2(5,add)); // returns 6, works perfectly fine
我的印象是闭包可以访问其包含函数的参数。为什么在场景1中," x"包含的函数无法访问doMath中的param?
答案 0 :(得分:1)
在方案1 中 第一个输出错误,因为返回的函数需要一个参数而你不会给出一个参数。如果删除它有效的参数:
// A function that takes in a number (x) and adds one to it.
function doMath(x){
return function (){ // <--- here
return x + 1;
}
}
var didMath = doMath(5);
console.log(didMath());
在你的另外两个例子中,你确实给出了一个参数,这是一个被考虑的参数。不是您作为doMath()
答案 1 :(得分:1)
这里发生的事情是你永远不会存储x的值,你总是返回一个新函数,看看这个例子它应该按照你的预期工作,也许可以帮助你下沉
function doMath(x){
var y = x;
return function(y){
return y + 1;
}
}