我正在阅读Greg Franko的博客文章,标题是“jQuery最佳实践”。
在他的早期幻灯片中,他解释了做事情的典型/更好/最佳方式。
典型(链接)
$("document").ready(function() {
console.log('hello world');
});
或者
$(function() {
console.log('hello world');
});
Better (链接)
更好(function($, window, document) {
$(function() {
console.log('hello world');
});
}(window.jQuery, window, document));
最佳实践 (链接)
(function(yourcode) {
yourcode(window.jQuery, window, document);
}(function($, window, document) {
$(function() {
console.log('hello world');
});
}));
所以,我想问的是- 第三个例子比第二个例子更好在哪里?两者都是IIFE。我唯一看到的区别是,#2将jQuery对象(+窗口+文档)传递给IIFE并运行代码,而#3将jQuery对象(+窗口+文档)和 JavaScript代码传递给IIFE。这有什么好处呢?
那么我的问题是:第三个例子比第二个例子更好在哪里?两者都是 IIFE。唯一的区别是 #2 将 jQuery 对象 (+ window + document) 传入 IIFE 并立即运行代码,而 #3 则将 jQuery 对象 (+ window + document) 和 JavaScript 代码一起传入 IIFE。那么这有什么好处呢?
$
之外,有时人们会尝试在同一页上使用不同版本的jQuery
(虽然很少见)。这在 WordPress 的早期经常发生,当时 WP 没有附带 jQuery,插件/主题开发人员会提供自己的版本,显然会引起冲突。这就是为什么默认情况下,WP 在.noConflict()
中运行 jQuery,并需要一个闭包包装器将其作为引用传递的主要原因。 - tao