使用 $(function 等启动 javascript 代码

2024-04-09

我正在研究 Backbone 和来自的待办事项示例应用程序http://todomvc.com/ http://todomvc.com/我注意到有 3 种方法可以在文件中启动代码:

$(function() {
 // code here
});

$(function( $ ) {
 // code here
});

(function() {
 // code here
}());

我不明白其中的差异以及何时应该使用其中一种而不是另一种。

我还看到一些人用它来启动他们的代码:

$(document).ready(function(){
  // code here
});

据我所见,这就是完整的写法吧?

更一般地说,我是否应该始终将我的 javascript 代码包含在每个文件中类似的内容中?

谢谢你的建议。


  1. $(document).ready(function(){})确保您的代码在 DOM 上运行,以便您可以访问 DOM。您可以阅读有关此内容的更多信息jQuery 的文档 http://api.jquery.com/ready/.

  2. $(function(){})只是 #1 的别名。这里的任何代码都将等待 DOM 准备好(请参阅文档 http://api.jquery.com/ready/).

  3. $(function($){})相当于 #1 和 #2,只是你在中得到了对 jQuery 的干净引用局部范围 http://skilldrick.co.uk/2011/04/closures-explained-with-javascript/(参见下面的注释)。你也可以传入$到 #1 中的函数,它会做同样的事情(创建对 jQuery 的本地引用)。

  4. (function(){}())只是一个自执行匿名函数 https://stackoverflow.com/questions/592396/what-is-the-purpose-of-a-self-executing-function-in-javascript,用于创建一个新的闭包。

请注意,这些都不是 Backbone 特有的。前 3 个是特定于 jQuery 的,而第 4 个只是普通的 JavaScript。


Note:要了解上面#3 中发生的情况,请记住$是一个别名jQuery。然而,jQuery 并不是唯一使用$多变的。自从$可能会被其他人覆盖,你要确保在你的范围内,$将始终引用 jQuery - 因此$争论。


最后,基本上可以归结为以下两个选择:

  1. 如果您的 JavaScript 已加载到head,你必须等待文档准备好,所以使用这个:

    jQuery(function($) {
        // Your code goes here.
        // Use the $ in peace...
    });
    
  2. 如果您在文档底部加载 JavaScript(在结束正文标记之前 -你绝对应该这样做 http://developer.yahoo.com/performance/rules.html/#js_bottom),那么就不需要等待文档准备好(因为在解析器到达脚本时 DOM 已经构造完毕),并且SEAF https://stackoverflow.com/questions/592396/what-is-the-purpose-of-a-self-executing-function-in-javascript(又名IIFE http://benalman.com/news/2010/11/immediately-invoked-function-expression/) 就足够了:

    (function($) {
        // Use the $ in peace...
    }(jQuery));
    

P.S.要更好地理解闭包和范围,请参阅JS101:关于范围的简短教训 http://dailyjs.com/2012/07/23/js101-scope/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 $(function 等启动 javascript 代码 的相关文章

随机推荐

  • 如何在单引号字符串中使用变量?

    如何回显单引号内的变量 echo test text here is some test text counter output gt gt FILE 变量在双引号字符串中扩展 但在单引号字符串中不扩展 name World echo He
  • 在设备驱动程序中使用 select()/poll()

    我有一个驱动程序 它可以处理多个 TCP 连接 有没有一种方法可以在给定列表的情况下执行类似于内核中用户空间应用程序 api 的 select poll epoll 的操作struct sock s Thanks 您可能想编写自己的自定义s
  • MATLAB 类对象未更新

    我正在编写一个简单的 MATLAB 类 它具有一些属性和一个方法 类的构造函数使用默认值初始化属性 类的方法在类被构造之后获得额外的输入以更新类属性 classdef classTest properties p1 p2 p3 p4 end
  • 如何使用 css 代码单独设置 gtk 小部件的样式

    在这之后GTK 将字体更改为旋转按钮 https stackoverflow com questions 47083294 gtk change font to spin button和这个为什么 CSS 样式没有应用于 GTK 代码 ht
  • 如何使用文本操作

    使用目的是什么文本动作 http docs oracle com javase 6 docs api javax swing text TextAction html from 抽象动作 http docs oracle com javas
  • 将cpp文件添加到cocos2d-x项目android项目中

    我已按照本教程进行操作http www raywenderlich com 33750 cocos2d x tutorial for ios and android getting started http www raywenderlic
  • Facebook Graph API:如何获取评论中的“来自”字段

    我有一个尚未发布的 Facebook 应用程序 测试模式 我使用页面访问令牌从我自己页面上特定帖子的评论中提取 来自 字段 但它返回空字段 这是我的图形 API 查询 gt post id comments fields from 当我使用
  • 给单元格着色 Google Chart - 散点图

    我在我的一个项目中使用谷歌图表 我需要使用以下代码为谷歌散点图中的一组单元格着色 我在用google visualization arrayToDataTable用于处理数据 以下是我的代码 div div
  • 在 Android 中使用 Service 作为单例

    创建一个不好的做法吗 Service作为单身人士工作 我的意思是一个Service它永远不会停止 并且包含一些其他引擎和Activities会使用 所以Service可能有类似的东西 public class CustomService e
  • 对空间数据使用简单的 for 循环

    抱歉 这将是一个 for 循环 101 问题 我正在努力编写一个简单的 for 循环来根据经度纬度数据生成城市之间的距离表 locations lt read csv distances csv Locations 返回下表 City Ty
  • 具有自由 CORS 政策的公开托管图像? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在做一些将图像加载到画布上的测试 并且正在使用私下里在我们的 aws cdn 上托管图像 这个 c
  • 如何找到 ROI 并检测内部标记?

    我是计算机视觉的初学者 我有一个关于检测和跟踪的问题 我想检测下图中的白色矩形 以确定感兴趣的区域并检测红色标记的轮廓 但我不想利用颜色信息来检测标记 谁能给我关于如何做到这一点的建议 如果您只想检测圆圈 则可以使用经过调整的霍夫变换 ht
  • 具有有序索引的 R 向量-向量匹配

    这里我有两个字符串向量 它们的顺序很重要并且无法更改 vec1 lt c carrot carrot carrot apple apple mango mango cherry cherry vec2 lt c cherry apple 我
  • 可通过属性名称或索引选项访问的结构

    我对 Python 非常陌生 并试图弄清楚如何创建一个具有可通过属性名称或索引访问的值的对象 例如 os stat 返回 stat result 或 pwd getpwnam 返回 struct passwd 的方式 在试图弄清楚这一点时
  • alloca可以完全替代吗?

    我读过很多地方alloca已过时 不应使用 而应使用可变长度数组 我的问题是这样的 是alloca完全可以用变长数组代替 在我的特定实例中 我有一些看起来像这样的东西 typedef struct int value size t size
  • 如何在 Kotlin 中编写以下代码来实现回调

    我如何像java一样用Kotlin编写 Callback callback new Callback Override public void getCallback ServerResponse serverResponse var ca
  • 基于 RCP 的应用程序的 P2 更新失败

    我尝试通过 P2 更新站点更新基于 Eclipse RCP 3 5 的应用程序 该应用程序包含两个功能 产品是由Eclipse Buckminster P2 更新站点的创建是产品构建的一部分 当通过菜单开始更新时 Update gt Che
  • 为什么这个未使用的 self.hash 方法会导致“无法将字符串转换为整数”错误?

    我正在跑过Lynda Rails 3 教程 http www lynda com Ruby on Rails 3 tutorials essential training 55960 2 html 在某一时刻 在名为 access cont
  • 如何检测重复数据?

    我有一个简单的联系人数据库 但用户输入重复数据时遇到问题 我已经实现了一个简单的数据比较 但不幸的是 输入的重复数据并不完全相同 例如 姓名拼写错误 或者一个人输入 Bill Smith 另一个人输入 William Smith 表示同一个
  • 使用 $(function 等启动 javascript 代码

    我正在研究 Backbone 和来自的待办事项示例应用程序http todomvc com http todomvc com 我注意到有 3 种方法可以在文件中启动代码 function code here function code he