javascript - 使用 $(function 等启动 javascript 代码

标签 javascript jquery backbone.js

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

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

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

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

我不明白其中的区别以及何时应该使用其中一个。

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

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

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

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

感谢您的建议。

最佳答案

  1. $(document).ready(function(){}) 确保您的代码在 DOM 上运行就绪,以便您可以访问 DOM。您可以在 jQuery's documentation 中阅读更多相关信息.

  2. $(function(){}) 只是#1 的别名。此处的任何代码都将等待 DOM 就绪 ( see the docs )。

  3. $(function($){}) 等同于#1 和#2,只是您在 local scope 中获得了对 jQuery 的清晰引用。 (见下面的注释)。您同样可以将 $ 传递给 #1 中的函数,它会做同样的事情(创建对 jQuery 的本地引用)。

  4. (function(){}()) 只是一个 self-executing-anonymous-function , 用于创建一个新的闭包。

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


注意:要理解上面#3 中发生的事情,请记住 $jQuery 的别名。然而,jQuery 并不是唯一使用 $ 变量的库。由于 $ 可能会被其他人覆盖,因此您要确保在您的范围内,$ 将始终引用 jQuery - 因此 $ 参数.


最后,基本上归结为以下2个选项:

  1. 如果您的 JavaScript 在 head 中加载,您必须等待文档准备就绪,因此请使用:

    jQuery(function($) {
        // Your code goes here.
        // Use the $ in peace...
    });
    
  2. 如果您在文档底部加载 JavaScript(在结束正文标记 - which you should definitely be doing 之前),则无需等待文档准备就绪(因为 DOM 已在解析器构建时完成)获取你的脚本)和一个SEAF (又名 IIFE )就足够了:

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

P.S. 要更好地理解闭包和作用域,请参阅 JS101: A Brief Lesson on Scope .

关于javascript - 使用 $(function 等启动 javascript 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12008843/

相关文章:

javascript - 将带有参数的方法绑定(bind)到主干模型更改事件

javascript - 第一次点击时主干点击事件不会触发

javascript - jQuery 爆炸效果

javascript - Highcharts Y 轴在处理大型数组时跳过标签

javascript - 如何检查 omegle 与 nodejs 集成中的错误(未处理的异常)?

javascript - 可以将事件监听器绑定(bind)到(假设的)onChangeInnerHTML 事件吗?

javascript - 它使用 Coffeescript 调用生成的 javascript

javascript - 一个项目中的 Coffeescript 和 es6 - 实践中的迁移

javascript - IE8正在将表单提交到当前页面

javascript - 从插件中的 jQuery 对象中删除元素