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 次 |
最近记录: |