Javascript 将响应值存储到全局对象中。成功但没有';行不通

Javascript 将响应值存储到全局对象中。成功但没有';行不通,javascript,object,asynchronous,fetch,Javascript,Object,Asynchronous,Fetch,我真的无法理解JS是如何运行的。你能给我解释一下吗(至少,给我一些关键词) fetch(“https://opentdb.com/api.php?amount=10") .then(res=>res.json()) 。然后(res=>{ 多斯(雷斯) }) 函数dosth(数据){ console.log(数据) console.log(data.results[0]) } 它来了: 但当我改变我的方式 让myobj={} 取回(“https://opentdb.com/api.php?am

我真的无法理解JS是如何运行的。你能给我解释一下吗(至少,给我一些关键词)

fetch(“https://opentdb.com/api.php?amount=10")
.then(res=>res.json())
。然后(res=>{
多斯(雷斯)
})
函数dosth(数据){
console.log(数据)
console.log(data.results[0])
}
它来了:

但当我改变我的方式

让myobj={}
取回(“https://opentdb.com/api.php?amount=10")
.then(res=>res.json())
。然后(res=>{
for(设i=0;i res.json())
。然后(res=>{
对于(让i=0;i{}/devtools的色度显示一个具有属性的对象(我认为它一定是一个空的对象)。
>未定义

你能给我解释一下吗?

JavaScript通常是同步运行的。但是,fetch调用是异步调用

dosth函数应位于如下所示的后面:

让myobj2={}
取回(“https://opentdb.com/api.php?amount=10")
.then(res=>res.json())
。然后(res=>{

for(设i=0;iJavaScript正常同步运行。在第三种情况下,您收到空对象,因为
fetch
调用是异步调用,即为什么
dosth(myobj)
fetch
调用完成之前被调用,并将给您响应。因此,调用
dosth(myobj)很好
,在接收响应数据的
fetch
调用的响应块内,否则对象将为空

原因:

{}//空对象。
=>它来自您的第1行,即
让myobj={}


=>关于
数据[“0”]
,数据是没有属性的空对象。

实际上,它不是空对象,我控制台记录了它,仍然有数据,但当我尝试访问它的属性时,它的属性是未定义的。我捕获了我的devtools,检查了链接,你就会知道我为什么问这个问题。