我正在调试其他人的JavaScript代码,大部分代码都包含在这样:
(function ($) {
//majority of code here...
})(jQuery);
($)
和(jQuery)
发生了什么?我没有被教过这样的代码,也没有见过它们。他们的目的是什么?
同样,没有document.ready
,但我认为这是因为代码在最后由();
读取后立即执行?
答案 0 :(得分:16)
var $ = "some value we don't care about";
// v=====normal plain old function
(function ($) {
// ^=======receives jQuery object as the $ parameter
//majority of code here, where $ === jQuery...
$('.myclass').do().crazy().things();
})(jQuery);
// ^=======immediately invoked, and passed the jQuery object
// out here, $ is undisturbed
alert( $ ); // "some value we don't care about"
答案 1 :(得分:13)
当您需要/需要使用jQuery.noConflict()
时,这非常有用,而全局名称$
不是jQuery的别名。您发布的代码只允许您使用较短的$
来表示匿名函数中的jQuery
,而$
不需要是全局的。{/ p>
答案 2 :(得分:3)
只是扩展RightSaidFred's回答一下,当我第一次看到()()
语法时,我有点迷惑,但是一旦我意识到括号被用来定义一个匿名函数就有意义了然后打电话给它。 e.g:
(function (msg){alert(msg)})('hello');
...定义一个函数,然后调用它,将'hello'作为参数传递。
问题中的例子:
(function ($) {
//majority of code here...
})(jQuery);
将jQuery传递给一个匿名函数,并在函数中将其称为$,这是一种保证$将适用于jQuery而不会干扰其他任何内容的方法。
答案 3 :(得分:0)
此结构称为JQuery插件,插件的目的是在项目中创建任何常见任务/功能的框架,同样可以根据您在不同页面或同一页面中的使用情况扩展插件。这样你可以避免在任何地方重复相同的代码。