窗口.加载和文档.Ready:多次指定执行顺序
window.onload and document.ready : execution order in case specified multiple times
我们都知道我们可以使用文档。准备多次,它们将按照脚本中提到的顺序一个接一个地执行。
我们也知道我们可以使用window。只加载一次。
这里的问题是,如果我们使用window会发生什么。onload吗?这个错误是执行第一个而忽略其余的还是执行最后一个而忽略其余的?
jsFiddle: https://jsfiddle.net/CanvasCode/ouk7aatj/
最后一次onload将被触发,之前所有的onload
语句将被忽略
window.onload= function() {
alert("Onload 1");
};
window.onload= function() {
alert("Onload 2");
};
var i = 0;
window.onload= function() {
i = 10;
alert(i);
};
window.onload= function() {
i++
alert(i);
};
输出:1
你可以给窗口附加一个函数。像这样Onload事件监听器,如果你想让它像document.ready
一样"行动"jsFiddle: https://jsfiddle.net/CanvasCode/ouk7aatj/1/
window.addEventListener('load', function (){
alert('Function #1');
});
window.addEventListener('load', function (){
alert('Function #2');
});
首先,$(document).ready(...)
和window.onload
有根本的区别。第一个在HTML文档加载之后发生,原生onload
在窗口加载时发生,这意味着也加载了资源(图像,…)。
看下面的例子:
window.onload = function () { console.log(1); }
window.onload = function () { console.log(2); }
意味着第一个函数被指向第二个函数所覆盖。在您的控制台中,输出将是2
,并且console.log(1)
将永远不会执行。
$(document).ready(function () { console.log(1); });
$(document).ready(function () { console.log(2); });
两个函数都将被调用,输出将同时是1
和2
。
原因是$(document).ready(fn)
是jQuery提供的一个函数,它接受一个函数并将其添加到一个队列中,该队列在文档准备好时执行。
另一方面是窗口。onLoad是窗口对象上的一个属性,当页面加载时,浏览器会调用该属性。因此,如果你访问它两次,它就会被覆盖。如果您这样做,您可以构建类似于$(document).ready(fn)
的接口:
window.onLoadQueue = []
window.onLoad = function() {
window.onLoadQueue.forEach(function(fn) {
fn()
});
};
window.addOnLoad = function(fn) {
// TODO: test if fn is a function
window.onLoadQueue.push(fn);
}
相关文章:
- javascript函数和代码隐藏函数的执行顺序
- Node.js:多个然后'It’执行顺序不正确
- 不同'单击'不同脚本中的回调:我可以控制执行顺序吗
- 代码混淆的执行顺序
- Javascript执行顺序错误
- Javascript执行顺序和回调
- 奇怪的javascript代码执行顺序
- for 循环/递归中的执行顺序
- JavaScript 中的执行顺序问题
- 来自函数 Javascript 的 NaN 返回值 ||函数执行顺序
- 控制承诺执行顺序
- 我可以信任 JavaScript 中声明中的执行顺序吗?
- 使用webcomponenetsjs的HTMLImports以意外的执行顺序加载导入-firefox
- 确保执行顺序:javascript
- Javascript代码的执行顺序
- 保证HTML表单提交和jQuery onclick的执行顺序
- 在ASP.Net中运行javascript时的执行顺序
- jQuery函数执行顺序
- Javascript中绑定到事件的函数的执行顺序
- 淘汰js可观察扩展的执行顺序是什么