为什么windows.onload会多次执行?
我正在绑定像这样的window.onload事件
// It's a little more complex than this, I analyze if there is any other function // attached but for the sake of the question it's ok, this behaves the same. window.onload = myfunction;
在生产服务器上多次在本地计算机上触发Onload两次
如果我通过jQuery等效更改它
$jQuery(window).load(myfunction);
它的行为与预期一致(仅执行一次)。
你能帮助我理解为什么第一个选项不能正常工作的可能原因吗?
谢谢!
你的作业括号 – myfunction()
– 执行你的function。你没有显示 myfunction
作用,但这意味着该函数的返回值被赋值给window.onload
,而不是函数本身。所以,我不知道如何执行,除非你以某种方式让它工作,比如结束函数 return this;
你要
window.onload = myfunction;
鉴于window.onload
的性质,纯粹的浏览器事件似乎不可能同时调用myfunction
。 因此,函数内部的断点将帮助您查看调用堆栈。 我已经为Chrome添加了屏幕截图。
示例代码:
var alertme = function() { alert("Hello"); } window.onload = alertme; function testsecondcall() { alertme(); } testsecondcall();
- 在Chrome中打开您的页面。
- 页面加载一次后,打开“开发人员工具”面板,在函数内的行上放置一个断点,然后刷新页面。
- 检查它断开的两次调用堆栈。 一个是空的(实际的window.onload)。 另一个应该给你一些如下信息:
在右侧,在“调用堆栈”下,您会看到由testsecondcall
调用testsecondcall