为什么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(); 
  1. 在Chrome中打开您的页面。
  2. 页面加载一次后,打开“开发人员工具”面板,在函数内的行上放置一个断点,然后刷新页面。
  3. 检查它断开的两次调用堆栈。 一个是空的(实际的window.onload)。 另一个应该给你一些如下信息:

在此处输入图像描述

在右侧,在“调用堆栈”下,您会看到由testsecondcall调用testsecondcall