首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么递归调用没有触发window onload事件?

递归调用没有触发window onload事件的原因是因为window onload事件是在整个页面及其所有资源加载完成后触发的,而递归调用会导致代码陷入无限循环中,阻塞了页面的加载过程,从而无法触发window onload事件。

递归调用是指在函数内部调用自身的过程。当页面加载时,浏览器会按照HTML文档的顺序解析和加载各个元素和资源,包括HTML、CSS、JavaScript等。当浏览器解析到JavaScript代码时,会逐行执行,遇到函数调用时会将函数压入调用栈中,然后执行函数体内的代码。在递归调用中,函数会不断地调用自身,导致函数不断地被压入调用栈中,直到达到浏览器的最大调用栈限制,或者代码中包含终止条件才会停止。

由于递归调用会导致代码陷入无限循环,浏览器无法继续加载其他资源,因此页面的加载过程被阻塞,直到递归调用结束或达到最大调用栈限制。而window onload事件是在页面及其所有资源加载完成后触发的,因此当递归调用阻塞了页面的加载过程时,window onload事件无法被触发。

解决这个问题的方法是避免在递归调用中阻塞页面加载,可以通过优化递归算法、添加终止条件、使用异步操作等方式来避免无限循环。另外,可以考虑将递归调用放在其他事件触发的回调函数中执行,而不是依赖于window onload事件。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云官网:https://cloud.tencent.com/
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 云原生应用引擎 TKE:https://cloud.tencent.com/product/tke
  • 人工智能平台 AI Lab:https://cloud.tencent.com/product/ailab
  • 物联网开发平台 IoT Explorer:https://cloud.tencent.com/product/iotexplorer
  • 移动应用开发平台 MTA:https://cloud.tencent.com/product/mta
  • 云存储 COS:https://cloud.tencent.com/product/cos
  • 区块链服务 BaaS:https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙:https://cloud.tencent.com/solution/meta-universe
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

客户端的js js脚本的引入 js的解析过程

;}, 2000); 2 返回值为一个定时器的编号,该定时器和window.setInterval(重复调用一个函数,或执行一段代码)共用一个编码池。 该代码,并没有显式的使用window属性。...在没有直接说明的时候,自动从作用域链往上寻找,直到window顶部。window对象有一个引用自身的属性,即window,如果要引用其窗口本身,可以用window这个属性。...事件驱动的js js还能通过注册事件程序函数写程序。之后在发生该事件的时候异步调用这些函数。 程序会响应一个事件,然后调用一个函数,该函数称为事件处理程序,事件监听器,或者回调,将该函数注册。  ...等待文档载入完成,触发一个匿名函数,将onload.loaded的值改为true,此时再次传入的函数f将会返回js的执行队列中,等待执行。...此时文档全部解析完成,但浏览器可能在等待图片的加载,等所有的异步脚本全部完成载入和异步执行的时候,将会触发load事件,表明全部执行完成,readState将会改为complete 此刻调用异步事件,响应用户输入事件

13.1K80
  • windowonload事件和domcontentloaded执行顺序

    window.onload事件触发时,页面上所有的DOM,样式表,脚本,图片,flash都已经加载完成了。...执行完成’这句话三个浏览器都没有执行,只是输出了‘bodyonload’,所以我们得出了一个结论就是body的onload事件会覆盖掉window.onload事件。...所以我们得出一个结论就是window.onload和body的onload事件谁在下面会执行谁。...但是,jQuery的.ready()方法以一种重要且有用的方式不同:如果DOM准备就绪并且DOMContentLoaded在代码调用之前浏览器触发.ready( handler ),则该函数handler...相反,DOMContentLoaded事件触发后添加的事件侦听器永远不会执行。 浏览器还在对象load上提供事件window。当此事件触发时,表示页面上的所有资源都已加载,包括图像。

    3.7K10

    JS DOM学习笔记

    delay);//每过delay毫秒就调用一次method函数,相当于是计时器 4、window.clearInterval(name); //取消计时器name //setInterval(method...(页面加载后触发):网页加载完毕时触发,浏览器是一边下载文档、一边解析执行,可能会出现JavaScript执行时需要操作某个元素,这个元素还没有加载,如果这样就要把操作的代码放到body的onload事件中...元素的onload事件是元素自己加载完毕时触发,body onload才是全部加载完成。...window.onload = function () { //...... }  //动态注册事件,窗体加载完成后执行,和body onload效果差不多 7、window.控件Id(不建议使用),推荐...的ready和Dom的onload的区别:window.onload只能注册一次,是在所有的Dom元素创建完毕、图片、CSS都加载完毕后才被触发;而jQuery的ready则是在Dom元素创建完毕后被触发

    4K40

    使用原生 JavaScript 在页面加载完成后处理多个函数

    这样的做法肯定是很不合理的,因为触发操作直接写进了 HTML 结构里面,内容和行为没有隔离开,对日后的二次开发或者修改带来不便。...监听 window 对象,如果 window 对象的 load (加载完成)事件触发,那么就执行 function 这个函数。...window.onload 事件 onload 事件只有在整个页面已经完全载入的时候才会被触发,我们将 JavaScript 代码写进 onload 事件中,就可以保证在 HTML 元素被加载完成之后,...页面中无法出现多个 window.onload 事件,如果出现了多个 onload 事件,那么后面的内容会覆盖前面的。...前面说过 window.onload 事件加载的缺陷是只能在页面中使用一次。而使用监听器的方法,就可以监听为 windowonload 事件分别加载多个函数了。

    2.8K20

    JavaScript 页面资源加载方法onload,onerror总结

    这里有两个事件onload —— 成功加载, onerror —— 出现 error。 加载脚本 假设我们需要加载第三方脚本,并调用其中的函数。...script.onload 我们的得力助手是 load 事件。它会在脚本加载并执行完成时触发。...也就是说:如果脚本成功加载,则即使脚本中有编程 error,也会触发 onload 事件。如果要跟踪脚本 error,可以使用 window.onerror 全局处理程序。...为什么我们需要 error 的详细信息? 因为有很多服务(我们也可以构建自己的服务)使用 window.onerror 监听全局 error,保存 error 并提供访问和分析 error 的接口。...唯一的例外是 :出于历史原因,不管加载成功还是失败,即使页面没有被找到,它都会触发 load 事件

    4.2K10

    JavaScript笔记(18)之BOM

    因为程序自上而下执行,button还没有创建就获取元素,肯定是会报错的,所以我们要学习窗口加载事件,将窗口的事件全部加载完毕以后再触发这个事件肯定就可以生效了....是窗口(页面)加载事件,当文档内容完全加载完成会触发事件(包括图像,脚本文件,CSS文件等),就调用的处理函数....注意: 有了window.onload就可以把JS代码写到页面元素的上方,因为onload是等页面内容全部加载完毕再去执行处理函数 window.onload传统注册事件方式只能写一次,如果有多个,会以最后一个...如果使用addEventListener则没有限制 第二种窗口加载事件 如果页面的图片很多的话,从用户访问到onload触发可能需要较长的时间,交互效果就不能实现,必然影响到用户体验,此时用DOMContentLoaded...调整窗口大小事件 window. addEventListener('resize', function( ){ }); window.onresize是调整窗口大小加载事件,当触发时就调用的处理函数

    81310

    由于网速引起的问题

    我们经常会碰到这种情况,一个网页在一台电脑上运行没有什么问题,在另外一台电脑上就会报找不到属性的错误,这个是由于一般是由于我们触发某个事件时,这段js代码还没有被载入,导致找不到这个属性。...这种情况我们一般的处理方法是将js代码写在前面,这个如果控件(如按钮)被载入前就可以保证这段js代码已经被载入了,但是有的时候,js代码由于某种原因不得不写在下面,这样就没有办法保证我们触发一个事件时,...这段js代码完全被载入,最好的办法就是将这些事件写在一个函数中,然后系统在触发onload调用这个函数,如下: function initObject...); 这里,initObject函数中只有一个下一步按钮的onclick事件,这个事件触发的nextPaper函数,这么这句话: window.attachEvent("onload...", initObject); 意思时我网页触发onload调用initObject,只有就保证了网页被载入前对属性进行了初始化。

    79220

    js中如何在不影响既有事件监听的前提下新增监听器

    需求澄清 比如某个按钮已经绑定了2-3个对Window对象的load事件的监听,现在需要添加一个新的对click事件的监听器,但在一定条件下才会同时触发原有的2-3个load监听器,否则只触发新添加的这个事件...ES5方法 ES5中可以通过添加包装函数的方式来实现: _windowonload = window.onload; window.onload = function(){ additionalListener...ES6方法 ES6中添加的代理对象Proxy也可以用来实现这个需求,基本逻辑就是实现了对window.onload调用劫持: var onloadProxy = new Proxy(window.onload...AOP方法 AOP,即面向切面编程,从元编程的角度来实现链式调用(建议一般编程人员不要在原生对象上添加新特性),实现的逻辑就是在函数的原型对象上添加after方法,它接收一个函数作为参数,在函数被调用时先调用原函数...= window.onload.after(additionalListener);

    2.3K40

    【如果你要学JS {十一}】——window常见事件,灵活运用定时器

    注意: window下的一个特殊属性window.namewindow常见事件1.窗口加载事件1.1window.onloadwindow.onload是窗口(页面)加载事件,当文档内容完全加载完成会触发事件...注意:1.有了window.onload就可以把JS代码写到页面元素的上方,因为onload是等页面内容全部加载完 再去执行处理函数2.window.onload传统注册事件方式只能写一次,如果有多个,...会以最后-个window.onload为准。...如果页面的图片很多的话,从用户访问到onload触发可能需要较长的时间,交互效果就不能实现,必然影响用 户的体验,此时用DOMContentl oaded事件比较合适。...2.调整窗口大小window. onresize, window.addEventListener('resize', function () {}只要窗口大小发生像素变化,就会触发这个事件

    948130

    埋点统计优化,首屏加载速度提升

    试下想,为什么没有按照我预期的要求走,问题就是出现在这个onload方法上 onload事件 于是查询资料寻得,onload事件是会等引入的外部资源加载完毕后才会触发 外部资源加载完毕是什么意思?...举个栗子,我在引入的index2.html引入index2.js,然后在引入脚本上写一个onload事件测试loadIndex2方法是否在我延时加载后进行调用的 <!...是会等资源下载完了后,才会立即触发 所以我们回头来看 在浏览器的事件循环中,同步任务主线程肯定优先会先顺序执行 从打开印---111---, 然后到onload此时不会立即执行 遇到定时器,定时器设置了...所以我们看到pink就最先被推入数组中,当该脚本执行完毕后,此时会去执行定时器 定时器里我们看到我们插入方式insertBefore,当插入时成功时,此时会调用onload方法,所以此时就会添加maic...,为什么在动态插入脚本时,我要用一个定时器1s钟?

    91620

    Android 和 Webview 如何相互 sayHello(一)

    除了这一点还有一些其它的区别点,比如: 使用 window.location,并不能一定能实现跳转 unload 事件并不一定会触发 302/301 重定向问题会让客户端同学崩溃 https 证书问题...对于 a 标签来说,如果没有用户的手动行为,你是无法触发 onclick 事件的。所以,这里可以考虑使用构造 iframe 请求来实现类 shouldOverrideUrlLoading 的请求。...= function () { // 如果 shouldOverrideUrlLoading 没有很好的捕获并且取消 iframe 请求,则会直接执行 iframe 的 onload 事件...如果是 Android: 则需要先 append 到页面,然后再绑定 onload 和 src。否则会造成 onload 失败 和额外触发一次 about:blank 的 onload 事件。...打开一个网页有两个办法: webivew 自身控制:点击 a 标签直接跳转、通过 window.location 直接修改 调用WebView的loadUrl()方法 和 URL 打开相关的三个事件有:

    1.8K30

    前端知识普及之页面加载

    window.onload = function(){ $(".gravatar").on('click',function(){ //... }); //以及其他操作...从微观上分的话,页面加载有两部分 一个是以DOMContentLoaded触发为标志的DOM树的渲染完成 一个是以辅助资源img,font加载完成为触发标志的onload事件 他们两个的具体区别就是"资源的加载...这两个线,分别代表的是DOMContentLoaded和onload触发的时间。 这也更能直观的看出,DOMContentLoaded事件onload事件触发吧。现在回到我们开头的那个问题。...这个时候模拟触发DOMContentLoaded事件,其实和onload事件触发时间并没有太久的时间距离。 这种方式兼容低版本IE还是不太可靠的。...top.doScroll("left"); } catch(e) { //递归调用,直到当dom结构解析完成

    1.6K90

    JavaScript 学习-29.HTML DOM 事件

    (  和 ) onclick 当用户点击某个对象时调用事件句柄。 onmouseover 鼠标移到某元素之上。 onmouseout 鼠标从某元素移开。...ondblclick 当用户双击某个对象时调用事件句柄。 onkeydown 某个键盘按键被按下。 onkeypress 某个键盘按键被按下并松开。 onkeyup 某个键盘按键被松开。...onfocus 元素获取焦点时触发 onblur 元素失去焦点时触发 onchange 该事件在表单元素的内容改变时触发, , , 和 ...onfocus 元素获取焦点时触发 onsubmit 表单提交时触发 onload 加载页面 onload 通常用于 元素,在页面完全载入后(包括图片、css文件等等。)...="func()"> 二、在 script 中 window.onload=function(){do something...}; 使用示例 onload 加载示例<

    1K10

    异步加载脚本保持执行顺序

    2.Window onload: 通过监听windowonload事件触发行内代码的执行。只要确保外部脚本在windowOnload之前下载执行就可以保持执行顺序。 运行结果: ?...("onload",test); } 缺点:1.必须确保异步脚本是通过阻塞onload事件的方式加载的。          ...2.如果页面有更多的资源,那么外部脚本可能在onload时间出发之前早就完成加载,一般来说,行内脚本最好在外部脚本下载和执行完成之后立即调用。...4.Script onload: 前面提到的整合技术会增加页面的脆弱性、延迟和开销,通过监听脚本的onload事件可以解决这些问题。 运行结果: ? ?...代码: /* 数组queuedScripts存储执行队列中的脚本,每个脚本是拥有三个属性的对象: response: XHR响应 onload: 脚本加载后触发的函数 bOrder: 如果该脚本需要依赖其他脚本按顺序执行

    1.8K20

    深入理解事件

    很显然算,不然就没有必要区分事件冒泡和事件捕获了,这一点各个浏览器厂家也没有什么疑义。... window.onload = function(){ var outA = document.getElementById("outA");...:将该事件处理函数加入到捕获阶段,在捕获阶段会被调用。...阻止事件冒泡和捕获 默认情况下,多个事件处理函数会按照DOM事件流模型中的顺序执行。如果子元素上发生某个事件,不需要执行父元素上注册的事件处理函数,那么我们可以停止捕获和冒泡,避免没有意义的函数调用。...7.2 为什么要使用事件委托: 简单来说,就是为了减少不必要的dom操作,优化性能。 一般来说,dom需要有事件处理程序,我们都会直接给它设事件处理程序就好了,那如果是很多的dom需要添加事件处理呢?

    83640
    领券