bgc*_*ode 25 javascript jquery
假设我有:
<script src="script1.js"></script>
<script src="script2.js"></script>
Run Code Online (Sandbox Code Playgroud)
这两个脚本都ready()在里面.script2.js中的代码ready()总是会在第一个代码之后执行吗?
Fel*_*ing 29
是.
首先,代码script2.js将在之后执行script1.js,因为它在文档中稍后出现(并且未设置defer属性).
此外,实施[源]所述的ready功能是:
ready: function( fn ) {
// Attach the listeners
jQuery.bindReady();
// Add the callback
readyList.done( fn );
return this;
},
Run Code Online (Sandbox Code Playgroud)
其中readyList 似乎是[source]一个延迟对象[docs].这意味着回调按照它们添加到该对象的顺序执行.
pim*_*vdb 14
jQuery Deferred为此使用自己的对象.适当的jQuery代码证明它按顺序执行:
当你打电话时.ready,该功能被添加到readyList:
readyList.done( fn );
Run Code Online (Sandbox Code Playgroud)
当DOM准备就绪时,执行以下功能:
readyList.resolveWith( document, [ jQuery ] );
Run Code Online (Sandbox Code Playgroud)
该resolveWith函数包含此代码,该代码执行作为回调添加的函数:
while( callbacks[ 0 ] ) {
callbacks.shift().apply( context, args );
}
Run Code Online (Sandbox Code Playgroud)
如您所见,回调函数被shift编辑(从回调数组的开头弹出(即readyList)),因此第一个函数在第二个之前执行.
| 归档时间: |
|
| 查看次数: |
634 次 |
| 最近记录: |