我正在研究 Backbone 和来自的待办事项示例应用程序http://todomvc.com/ http://todomvc.com/我注意到有 3 种方法可以在文件中启动代码:
$(function() {
// code here
});
$(function( $ ) {
// code here
});
(function() {
// code here
}());
我不明白其中的差异以及何时应该使用其中一种而不是另一种。
我还看到一些人用它来启动他们的代码:
$(document).ready(function(){
// code here
});
据我所见,这就是完整的写法吧?
更一般地说,我是否应该始终将我的 javascript 代码包含在每个文件中类似的内容中?
谢谢你的建议。
$(document).ready(function(){})
确保您的代码在 DOM 上运行,以便您可以访问 DOM。您可以阅读有关此内容的更多信息jQuery 的文档 http://api.jquery.com/ready/.
$(function(){})
只是 #1 的别名。这里的任何代码都将等待 DOM 准备好(请参阅文档 http://api.jquery.com/ready/).
$(function($){})
相当于 #1 和 #2,只是你在中得到了对 jQuery 的干净引用局部范围 http://skilldrick.co.uk/2011/04/closures-explained-with-javascript/(参见下面的注释)。你也可以传入$
到 #1 中的函数,它会做同样的事情(创建对 jQuery 的本地引用)。
(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 - 因此$
争论。
最后,基本上可以归结为以下两个选择:
-
如果您的 JavaScript 已加载到head
,你必须等待文档准备好,所以使用这个:
jQuery(function($) {
// Your code goes here.
// Use the $ in peace...
});
-
如果您在文档底部加载 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(使用前将#替换为@)