如果我在index.html的脚本标签中使用异步,我是否需要在scripts.js中编写异步代码? &



我是JavaScript新手。我已经了解到,我可以通过在html脚本标签的前面放置async这个词来使我的脚本异步。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>    
<script async src="scripts.js"></script>
</body>
</html>

但是我在另一个视频中看到我需要使用回调/承诺/async-await来使我的代码异步。

const friendlyFunction = async ()=> {
return `Hello`
}
console.log(friendlyFunction)

有什么区别吗?

这是两个完全独立的概念。

script标签上的async属性意味着脚本不会被呈现阻塞——浏览器不会等待脚本负载完成下载并完成执行脚本,然后继续呈现HTML的后面部分。如果在script标签下面有其他内容(例如

),这将很有帮助。
<script async src="scripts.js"></script>
<div>more HTML content here</div>

(如果在script标签下面没有更多的内容,则该属性实际上没有任何用处)

相反,在JavaScript函数前面使用async关键字将意味着

  • 函数总是返回一个Promise
  • 如果你从函数内部返回一个值,返回的Promise将解析为该值
  • 你可以在async函数中使用await以一种干净的、语法平坦的方式来解析其他承诺,而不需要.then

它们是同一个词async的不同用法。您可能希望使用async属性,或者在某些情况下您可能希望使用async函数,或者两者都使用,或者两者都不使用。

最新更新