首页
学习
活动
专区
圈层
工具
发布

jquery - $(document).ready()里面的范围?

jQuery $(document).ready() 的作用域解析

基础概念

$(document).ready() 是 jQuery 中用来确保 DOM 完全加载并解析后执行代码的方法。它类似于原生 JavaScript 的 DOMContentLoaded 事件。

作用域范围

$(document).ready() 函数内部定义的变量和函数的作用域遵循 JavaScript 的标准作用域规则:

  1. 局部作用域:在函数内部使用 varletconst 声明的变量只在函数内部可见
  2. 全局作用域:不使用任何关键字直接赋值的变量会成为全局变量(不推荐)
  3. 函数作用域:在内部定义的函数也遵循同样的作用域规则

示例代码

代码语言:txt
复制
$(document).ready(function() {
    // 局部变量 - 只在ready函数内可见
    var localVar = "I'm local";
    let localLet = "I'm also local";
    const localConst = "Me too";
    
    // 全局变量 - 不推荐的做法
    globalVar = "I'm global (bad practice)";
    
    // 局部函数
    function localFunction() {
        console.log("I'm a local function");
    }
    
    // 可以访问DOM元素
    $("#myButton").click(function() {
        console.log("Button clicked");
    });
});

// 在ready函数外部
console.log(globalVar); // 可以访问
console.log(localVar); // 报错: localVar is not defined
localFunction(); // 报错: localFunction is not defined

优势

  1. 确保DOM就绪:保证代码执行时DOM已完全加载
  2. 避免竞态条件:防止在DOM未准备好时操作元素
  3. 多次使用:可以多次调用,都会按顺序执行
  4. 简写形式:可以使用 $(function() { ... }) 的简写

常见问题与解决方案

问题1:在ready函数外部无法访问内部定义的变量或函数 原因:这是JavaScript的正常作用域行为 解决:将需要全局访问的变量或函数定义在ready函数外部

问题2:ready函数内部的代码不执行 原因:可能jQuery库未正确加载或DOM已加载完成 解决:检查jQuery是否加载,或改用$(window).on("load", function() { ... })

问题3:事件绑定在动态添加的元素上无效 原因:ready函数执行时元素还不存在 解决:使用事件委托,如 $(document).on("click", ".dynamic-element", function() { ... })

应用场景

  1. 页面初始化操作
  2. DOM元素事件绑定
  3. AJAX请求初始化
  4. 插件初始化
  5. 表单验证设置

现代替代方案

随着现代JavaScript发展,可以使用以下替代方案:

  • DOMContentLoaded 事件
  • defer 属性的script标签
  • ES6模块系统
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • JQuery 入门学习(二)

    比如,css里面,定义一个类的样式的方法:.XXX{},而在Jquery里选择一个class=XXX的元素的方法:$(".XXX")。    ...事件详解     在很多Jquery代码中,我们总是能看到是这样的形式: $(document).ready(function(){ //Jquery代码 });     所有的代码被套在了最外层的...我上次也提到了,ready是一个事件。我们上面说的选择器,它选择某元素的作用,其实就是为了完成后面的工作。...ready事件在对象加载完成后触发,我们前面选择的是document对象,所以这个ready就是指整个文档加载完成后触发的事件。    ...所以整段代码意思就是为document对象的ready事件添加响应函数function(){},这个函数里面添加我们希望Jquery做的事情。

    1.5K10

    最常见的 20 个 jQuery 面试问题及答案

    $(document).ready() 是个什么函数?为什么要用它?(answer)   这个问题很重要,并且常常被问到。 ready() 函数用于在文档进入ready状态时执行代码。...使用$(document).ready()的最大好处在于它适用于所有浏览器,jQuery帮你解决了跨浏览器的难题。需要进一步了解的用户可以点击 answer链接查看详细讨论。   6....使用 jQuery $(document).ready() 的另一个优势是你可以在网页里多次使用它,浏览器会按它们在 HTML 页面里出现的顺序执行它们,相反对于 onload 技术而言,只能在单一函数里使用...$(document).ready() 是个什么函数?为什么要用它?(answer)   这个问题很重要,并且常常被问到。 ready() 函数用于在文档进入ready状态时执行代码。...使用 jQuery $(document).ready() 的另一个优势是你可以在网页里多次使用它,浏览器会按它们在 HTML 页面里出现的顺序执行它们,相反对于 onload 技术而言,只能在单一函数里使用

    14.7K30

    js的动态加载、缓存、更新以及复用(一)使用范围:遇到的问题:目标:页面结构:正文

    使用范围:   OA、MIS、ERP等信息管理类的项目,暂时不考虑网站。 遇到的问题:   完成一个项目,往往需要引用很多js文件,比如jQuery.js、easyUI等。...父页里使用jQuery   Var aa = $(’div’);  //找到父页里的所有div   子页里是不是可以这么做?   ....$ (’div’) ; //能够找到div,但是不是子页的div而是父页里的div。   咋回事呢?原因就在于搜索范围。jQuery是有三个参数的,我们平时只用了第一个,后面的就被忽略了。...就是搜索范围。没有指定的时候,jQuery会在哪里搜索呢?加载jQuery的页面里面搜索,而不是调用$的页面里搜索。   ....$ (’div’,document) ; //指定搜索范围:子页的document   等等,这个似乎很烦人,我们在写脚本的时候,还要考虑一下,这个脚本是在父页里执行还是在子页里执行吗?

    4.3K50

    jquery面试题目_高并发面试题

    更详细的分析和讨论参见上面的答案链接。 4. 如何在点击一个按钮时使用 jQuery 隐藏一个图片? 这是一个事件处理问题。jQuery为按钮点击之类的事件提供了很好的支持。...$(document).ready() 是个什么函数?为什么要用它?(answer) 这个问题很重要,并且常常被问到。 ready() 函数用于在文档进入ready状态时执行代码。...使用$(document).ready()的最大好处在于它适用于所有浏览器,jQuery帮你解决了跨浏览器的难题。需要进一步了解的用户可以点击 answer链接查看详细讨论。 6....使用 jQuery $(document).ready() 的另一个优势是你可以在网页里多次使用它,浏览器会按它们在 HTML 页面里出现的顺序执行它们,相反对于 onload 技术而言,只能在单一函数里使用...8. jQuery 里的 each() 是什么函数?你是如何使用它的?(答案如下) each() 函数就像是 Java 里的一个 Iterator,它允许你遍历一个元素集合。

    9.9K10

    JS DOM学习笔记

    onkeydown(按键按下)、onkeypress(按下按键)、onkeyup(松开按键)、onmousedown(鼠标按下)、onmousemove(鼠标移动)、onmouseout(鼠标离开元素范围...)、onmouseover(鼠标移动到元素范围)、onmouseup(鼠标按键释放)、oncontextmenu(在浏览器中单击鼠标右键显示‘右键菜单’时触发) 9、window.location对象:...中使用srcElement; 在FireFox里使用target 使用Dom获取和更改网页标签元素内文本,在IE中使用innerText; 在FireFox里使用textContent 动态为网页或元素绑定事件...,在IE中绑定事件的方法是attachEvent; 在FireFox中绑定事件的方法是addEventListener jQuery之类的框架进行了封装,解决了不同浏览器上Dom的不同 14、jQuery...的ready和Dom的onload的区别:window.onload只能注册一次,是在所有的Dom元素创建完毕、图片、CSS都加载完毕后才被触发;而jQuery的ready则是在Dom元素创建完毕后被触发

    4.8K40
    领券