gpt4 book ai didi

Javascript 为什么可以指定不带参数的回调?

转载 作者:行者123 更新时间:2023-11-30 20:05:48 26 4
gpt4 key购买 nike

我最初来自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);
});

最佳答案

我在这里看到两个问题:

  • 为什么可以在 javascript 中将回调函数作为变量或普通对象(不带参数)传递给另一个函数。

因为函数是一等对象,我们可以将一个函数作为参数传递给另一个函数,然后执行传入的函数,甚至返回它以供稍后执行。

在这里阅读更多: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(()...) function 没有隐式返回任何东西,它只是注册了一个函数,稍后会执行。当 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.

关于Javascript 为什么可以指定不带参数的回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52948015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com