无法理解Javascript高阶函数中的基本概念

时间:2015-06-04 22:31:49

标签: javascript higher-order-functions

我在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?

2 个答案:

答案 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;
    }
}