js 添加属性_了解 JS 的加载顺序和方式,实现 Ready 方法

页面加载JS顺序或方式不同,可能导致功能失效、加载解析时间过长等问题。文章介绍了defer、async属性对JS下载、执行顺序的影响,还提到了jQuery的ready方法及onload方法。强调JS执行顺序决定程序是否正常工作,应根据程序功能确定执行顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

页面加载 JS 顺序或方式不同,可能会导致功能失效、错误的产生或加载解析时间过长,拖慢整个页面展示。

了解 JS 的加载顺序

了解页面元素的加载顺序,找到 JS 执行失败原因。有时明明没有问的代码,可就获取不到元素值或信息,这可能是JS执行时间过早或过晚,而导致的 JS 执行失败。我们来看一幅图,了解defer、async属性对JS下载、执行顺序的影响

e5ecc3bdf56a88737c26ef323004b6d9.png
  1. 默认情况下,浏览器解析到JS文件就会立即下载文件,并执行文件,JS提前执行,获取不到页面元素,并导致页面解析中断,拖慢整个页面的加载。
  2. 添加async属性后,就会异步下载JS文件并执行,执行时间不可控,JS执行时间过早或过晚,而导致的 JS 执行错误或失败。
  3. 添加defer属性后,就会异步下载JS文件,等页面解析完成后再执行JS

Ready方法的实现

很多时候我们不把JS放在head中,而把JS放到body的最后面也就很好解释了?

  • 首先,JS的下载和执行会中断页面的解析,拖慢整个页面展示,
  • 然后,放在head中,页面元素还没有加载,JS方法就无法获取或处理页面上的元素,这一点很容易忽视,
  • 但是,我们还有ready方法。

jQuery中的ready方法会在页面解析后运行,语法如下:

//语法 1$(document).ready(function)//语法 2$().ready(function)//语法 3$(function)

自定义方法,通过监听DOMContentLoaded实现ready方法

/** * 页面解析后执行 fn * https://ichochy.com * /function ready(fn) {    if (window.addEventListener) {        window.addEventListener('DOMContentLoaded', function () {            //注销时间,避免重复触发            document.removeEventListener('DOMContentLoaded', arguments.callee, false);            fn(); //运行函数        }, false);    } else if (document.attachEvent) { //IE浏览器        document.attachEvent('onreadystatechange', function () {            if (document.readyState == 'complete') {                document.detachEvent('onreadystatechange', arguments.callee);                fn(); //函数运行            }        });    }}

当然还有我的onload方法,可以在页面完成所有加载后再执行

//window 的 onloadwindow.onload = function(){    //load https://ichochy.com    //some things ……}//body 的 onload

总结

可以看到,JS的执行顺序决定着程序是否正常工作。加载过早,可能无法获取到页面元素,而太晚,页面元素无法交互。对于执行的顺序,要以当前的程序功能而定。

联系方式

网站:https://ichochy.com/

源文:https://ichochy.com/posts/20200807/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值