异步/延迟JavaScript问题

异步/延迟JavaScript问题,javascript,jquery,async-await,jquery-deferred,Javascript,Jquery,Async Await,Jquery Deferred,我在页脚使用这段代码来消除渲染阻塞资源 <script async or defer src="/jquery.js"> /* custom code */ <script> $(document).ready(function(){ $('.menu-bar').click(function(){ $('.nav-bar').slideToggle(); }); $('.dropdown').click(function(){ $

我在页脚使用这段代码来消除渲染阻塞资源

<script async or defer src="/jquery.js">
 /* custom code  */
<script>    
$(document).ready(function(){
$('.menu-bar').click(function(){
   $('.nav-bar').slideToggle();
  }); 
  $('.dropdown').click(function(){
      $(this).toggleClass('inDrop');
      $('.dropdown-menu').slideToggle('slow');
  });

});
</script>

/*自定义代码*/
$(文档).ready(函数(){
$('.menu bar')。单击(函数(){
$('.nav bar').slideToggle();
}); 
$('.dropdown')。单击(函数(){
$(this.toggleClass('inDrop');
$('.dropdown menu')。滑动切换('slow');
});
});
现在我得到
uncaughtreferenceerror:$未定义
error


使用异步/延迟JavaScript的最佳方法是什么很难,因为它会在完成时立即执行,所以您无法确定脚本的检索顺序。与defer相比,它也可以忽略不计,defer会等到HTML解析后才开始,然后按顺序开始

以下是两个案例:

<HTML start>
<async js 1>
<async js 2 (dep on 1)>
<HTML parses>
<js 2 finishes and executes>
<js 1 finishes and executes>
<HTML finishes parsing>
香草JS:

`document.addEventListener("DOMContentLoaded", function() {
  ...code here...
};`

不能在带有
src
的脚本中包含代码。它们必须是独立的
标记。如果需要在另一个脚本标记中使用库,则不能使用
异步
。@Barmar,是的,我忘记在这里添加了。我现在更新了代码。您还需要在顶部断开脚本标记。/*自定义代码*/$(文档).ready(函数(){});这个代码正确吗?我看错了。对首先调用jQuery,然后两者都延迟,这将使它保持依赖性。如果我使用JS文件进行自定义代码,它将正常工作。但不适用于内联js codeWell是的。因为内联js在被解析的HTML中。您不能延迟内联HTML所依赖的库,因为它会延迟到内联代码之后。您要做的是将代码包装为已加载/就绪状态。如下所示:
$(document).ready(function(){…code here…}
不带jQuery:
document.addEventListener(“DOMContentLoaded”,function(){…code here…};
`$(document).ready(function() {
  ...code here...
};`
`document.addEventListener("DOMContentLoaded", function() {
  ...code here...
};`