当使用push方法时,为什么在声明API请求之前,第一个console.log(字符)从API请求返回数据?
如果不是将数据推送到字符,而是将其设置为注解掉的代码中的数据,则只有第二个console.log()返回预期的数据。
在这两个例子中,console.log(“第一个控制台日志”)总是像预期的那样首先执行,所以当使用push()方法时,console.log(“第一个控制台日志”)首先执行,但是第一个console.log(字符)仍然记录在console.log(“第一个控制台日志”)之前声明的数组,其中包含来自fetch()的数据。
使用VScode和chrome开发工具。
let characters = []
console.log("First console log")
console.log(characters)
fetch("https://hp-api.onrender.com/api/characters")
.then(res => res.json())
.then(data => {
characters.push(data)
// characters = data
console.log(characters)
console.log("Second console log")
})
1条答案
按热度按时间gc0ot86w1#
这是因为
console.log()
的输出是对数组的活引用,如果数组在记录后发生了变化,仍然可以在引用上看到变化。如果将其打印为JSON(即
console.log(JSON.stringify(characters))
),则会得到'[]'。当您将
characters
设置为新数组时,控制台中的引用仍然指向未更改的旧数组。