我最初来自Java编程语言,我只是想知道为什么在javascript中可以将回调函数作为变量或纯对象(不带参数)传递给另一个函数,然后在内部使用此回调函数另一个功能,但这一次要传递参数。
该回调函数如何返回我的用户对象,因为我没有在callback(user)
中指定返回函数,也没有为回调函数指定任何函数体。这是在setTimeout(()...)
函数内部完成的,因为timeoutHandler
实现隐式返回了什么吗?
var getUser = (id,callback) => {
var user = {
id: id,
name: 'Vikram'
};
setTimeout(() => {
callback(user);
},3000);
};
getUser(31, (userObject) => {
console.log(userObject);
});
答案 0 :(得分:1)
我在这里看到两个问题:
由于函数是一类对象,我们可以将一个函数作为参数传递给另一个函数,然后再执行该传入的函数,甚至将其返回以供以后执行。
在此处了解更多信息:https://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/
下面显示的功能也只是对象:
function hello() {
return 'hello';
}
hello.other = 'world';
console.log(hello() + ', ' + hello.other);
callback(user)
中指定返回函数,也没有为回调指定任何函数体。 setTimeout(()...)
函数不会隐式返回任何东西,它只是注册一个函数,稍后再执行。当setTimeout注册的函数触发时,它将调用callback(user)
并解析getUser
注册的函数,该函数登录到控制台。记住回调是异步的。
如果未指定,则函数具有隐式返回,该返回将返回undefined
,这意味着您没有显式返回。
下面显示了一个示例:
function hello() {
console.log('Hello, World');
}
console.log(hello()); // undefined.
function hi() {
return 'Hi, World';
}
console.log(hi()); // Hi, World.
答案 1 :(得分:0)
函数即回调函数在此处作为参考传递。因此,您可以随意传递它,当您调用它时,可以传递参数,它将引用原始函数。
它也不返回用户对象,只是安慰用户对象。由于您没有使用任何返回,它将返回未定义。尝试安慰fn返回的回调。
var getUser = (id,callback) => {
var user = {
id: id,
name: 'Vikram'
};
setTimeout(() => {
console.log(callback(user), 'return value of callback');
},3000);
};
答案 2 :(得分:0)
在javascript函数中是一个对象。
它的行为仅与()
相同
因此,您可以将函数作为值传递给另一个函数或变量。
javascript中的某些函数是异步的。 setTimeout是这样的异步功能。这意味着回调函数将在一段时间后运行。
发生了什么事
//assign anonymous function to variable
// until function without () it only a object
var getUser = (id,callback) => {
//set up params
var user = {
id: id,
name: 'Vikram'
};
// setup asynchronous function setTimeout
setTimeout(() => {
// run callback with params when time would done
callback(user);
},3000);
};
// call function which contains in getUser-variable and pass 2 params: int and callback-function
getUser(31, (userObject) => {
console.log(userObject);
});