将其他函数中的函数作为参数传递

时间:2018-11-01 11:23:37

标签: javascript function

我最近开始研究编程以及JS,HTML,CSS。 目前正在阅读一本书,其中包含以下代码片段,我尝试根据自己的实践和理解尝试来理解和修改这些代码。但是我真的不知道发生了什么。 有没有人可以请您尝试解释发生的事情以及为什么我的修改后的代码片段无法运行-因为它的确与运行正常的原始代码的一部分相似。 随附的第一段摘录是本书的原始内容。 第二个是我的,它是建立在前一个的基础上的。

var validateDataForAge = function(data) {
  person = data();
  console.log(person);
  if (person.age <1 || person.age > 99){
      return true;
  } else{
      return false;
  }
};

var errorHandlerForAge = function(error) {
  console.log("Error while processing age");
};

function parseRequest(data,validateData,errorHandler) {
  var error = validateData(data);
  if (!error) {
  console.log("no errors");
  } else {
  errorHandler();
  }
}

var generateDataForScientist = function() {
  return {
    name: "Albert Einstein",
    age : Math.floor(Math.random() * (100 - 1)) + 1,
  };
};

//parse request
parseRequest(generateDataForScientist, validateDataForAge,
errorHandlerForAge);

var validateAge = function(age) {
  person = age();
  console.log(age);

}

validateAge(17);

我收到以下错误消息:

TypeError:年龄不是函数     在validateAge:2:12     在eval:7:1     在评估     在新的承诺中

感谢您的帮助。

此致

3 个答案:

答案 0 :(得分:2)

这是您正在查看的代码。它期望data是一个函数。

var validateDataForAge = function(data) {
  person = data();

…就是这样(在它通过几个其他变量和函数调用传递后分配给generateDataForScientist的那个)。


这是您的代码:

var validateAge = function(age) {
  person = age();

它期望age是一个函数。

您在此处传递一个值:

validateAge(17);

17是一个数字,而不是一个函数。

答案 1 :(得分:0)

问题出在代码的这一部分

application.getComponent().inject(this);

age只是您返回的对象的属性,并且您在此代码中将age作为函数使用

char direction = '\';
printf("%c", direction);

您需要修改age属性才能成为这样的函数

var generateDataForScientist = function() {
  return {
    name: "Albert Einstein",
    age : Math.floor(Math.random() * (100 - 1)) + 1, // <- problem
  };
};

答案 2 :(得分:0)

data内安慰parseRequest会将其记录为函数。但是您需要属性age。因此,将validateData(data)替换为validateData(data());

var validateDataForAge = function(data) {
  let person = data;
  if (person.age < 1 || person.age > 99) {
    return true;
  } else {
    return false;
  }
};

var errorHandlerForAge = function(error) {
  console.log("Error while processing age");
};

function parseRequest(data, validateData, errorHandler) {
  console.log(data)
  var error = validateData(data());
  if (!error) {
    console.log(error);
  } else {
    errorHandler();
  }
}

var generateDataForScientist = function() {
  return {
    name: "Albert Einstein",
    age: Math.floor(Math.random() * (100 - 1)) + 1,
  };
};

//parse request
parseRequest(generateDataForScientist, validateDataForAge, errorHandlerForAge);