Javascript 将函数作为参数传递给其他函数
我最近开始学习编程和JS、HTML、CSS。 目前正在阅读一本书,其中包括以下代码片段,我试图理解并修改这些代码片段,以供自己练习和理解。但我真的不明白发生了什么。 有没有人可以试着解释一下发生了什么,以及为什么我修改过的代码片段不能运行——因为它看起来确实与原始代码片段中运行良好的部分相似。 所附的第一个片段是本书的原始片段。 第二个是在前一个的基础上建造的矿山Javascript 将函数作为参数传递给其他函数,javascript,function,Javascript,Function,我最近开始学习编程和JS、HTML、CSS。 目前正在阅读一本书,其中包括以下代码片段,我试图理解并修改这些代码片段,以供自己练习和理解。但我真的不明白发生了什么。 有没有人可以试着解释一下发生了什么,以及为什么我修改过的代码片段不能运行——因为它看起来确实与原始代码片段中运行良好的部分相似。 所附的第一个片段是本书的原始片段。 第二个是在前一个的基础上建造的矿山 var validatedatafow=函数(数据){ person=数据(); 控制台日志(个人); 如果(人·99岁){ 返回
var validatedatafow=函数(数据){
person=数据();
控制台日志(个人);
如果(人·99岁){
返回true;
}否则{
返回false;
}
};
var errorHandlerFlow=函数(错误){
日志(“处理时出错”);
};
函数parseRequest(数据、validateData、errorHandler){
var错误=验证数据(数据);
如果(!错误){
console.log(“无错误”);
}否则{
errorHandler();
}
}
var generateDataForScientist=函数(){
返回{
姓名:“阿尔伯特·爱因斯坦”,
年龄:Math.floor(Math.random()*(100-1))+1,
};
};
//解析请求
parseRequest(generateDataForScientist、ValidateDataForScientist、,
错误处理程序代码>这是您正在查看的代码。它期望数据
成为一个函数
…事实就是如此(在通过几个其他变量和函数调用后分配给generateDataForScientist
)
这是您的代码:
它期望age
成为一个函数
在这里传递一个值:
17
是一个数字,不是函数。这是您正在查看的代码。它期望数据
成为一个函数
…事实就是如此(在通过几个其他变量和函数调用后分配给generateDataForScientist
)
这是您的代码:
它期望age
成为一个函数
在这里传递一个值:
17
是一个数字,而不是一个函数。问题在于代码的这一部分
var generateDataForScientist = function() {
return {
name: "Albert Einstein",
age : Math.floor(Math.random() * (100 - 1)) + 1, // <- problem
};
};
问题就在这部分代码中
var generateDataForScientist = function() {
return {
name: "Albert Einstein",
age : Math.floor(Math.random() * (100 - 1)) + 1, // <- problem
};
};
在parseRequest
内部控制台data
将把它作为一个函数记录下来。但是您需要属性age
。因此,将validateData(data)
替换为validateData(data())代码>
var validatedatafow=函数(数据){
让人=数据;
如果(person.age<1 | | person.age>99){
返回true;
}否则{
返回false;
}
};
var errorHandlerFlow=函数(错误){
日志(“处理时出错”);
};
函数parseRequest(数据、validateData、errorHandler){
console.log(数据)
var error=validateData(data());
如果(!错误){
console.log(错误);
}否则{
errorHandler();
}
}
var generateDataForScientist=函数(){
返回{
姓名:“阿尔伯特·爱因斯坦”,
年龄:Math.floor(Math.random()*(100-1))+1,
};
};
//解析请求
parseRequest(generateDataForScientist、ValidateDataFow、ErrorHandlerFow)代码>在parseRequest
内部对数据进行控制台操作将其作为函数记录。但是您需要属性age
。因此,将validateData(data)
替换为validateData(data())代码>
var validatedatafow=函数(数据){
让人=数据;
如果(person.age<1 | | person.age>99){
返回true;
}否则{
返回false;
}
};
var errorHandlerFlow=函数(错误){
日志(“处理时出错”);
};
函数parseRequest(数据、validateData、errorHandler){
console.log(数据)
var error=validateData(data());
如果(!错误){
console.log(错误);
}否则{
errorHandler();
}
}
var generateDataForScientist=函数(){
返回{
姓名:“阿尔伯特·爱因斯坦”,
年龄:Math.floor(Math.random()*(100-1))+1,
};
};
//解析请求
parseRequest(generateDataForScientist、ValidateDataFow、ErrorHandlerFow)代码>您需要将年龄定义为函数您需要将年龄定义为函数谢谢您的帮助!谢谢你的帮助!
validateAge(17);
var generateDataForScientist = function() {
return {
name: "Albert Einstein",
age : Math.floor(Math.random() * (100 - 1)) + 1, // <- problem
};
};
var validateAge = function(age) {
person = age(); // <-- here ,age is not a function
console.log(age);
}
var generateDataForScientist = function() {
return {
name: "Albert Einstein",
age : function (){ return Math.floor(Math.random() * (100 - 1)) + 1 },
};
};