Javascript 这样做的目的是什么?(函数($){//function code here})(jQuery);

Javascript 这样做的目的是什么?(函数($){//function code here})(jQuery);,javascript,jquery,function,Javascript,Jquery,Function,我正在调试其他人的JavaScript代码,大部分代码都是这样包装的: (function ($) { //majority of code here... })(jQuery); ($)和(jQuery)是怎么回事?我没被教过这样的代码,也没见过他们。他们的目的是什么 同样,也没有document.ready,但我认为这是因为代码是在()读取后立即执行的结尾?这在您想要/需要使用时非常有用,并且全局名称$不是jQuery的别名。您发布的代码允许您仅在匿名函数中使用较短的$来表示jQu

我正在调试其他人的JavaScript代码,大部分代码都是这样包装的:

(function ($) {
    //majority of code here...
})(jQuery);
($)
(jQuery)
是怎么回事?我没被教过这样的代码,也没见过他们。他们的目的是什么


同样,也没有
document.ready
,但我认为这是因为代码是在
()读取后立即执行的结尾?

这在您想要/需要使用时非常有用,并且全局名称
$
不是jQuery的别名。您发布的代码允许您仅在匿名函数中使用较短的
$
来表示
jQuery
,而不需要是全局的
$

此结构称为jQuery插件,插件的目的是创建项目中任何常见任务/函数的框架,同样的方法,您可以根据您在不同页面或同一页面中的使用情况扩展插件。这样可以避免在任何地方重复相同的代码

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"
查看它

仅对答案进行一点扩展,当我第一次看到
()
语法时,我有点困惑,但当我意识到括号被用于定义匿名函数并调用它时,这是有意义的。e、 g:

(function (msg){alert(msg)})('hello');
。。。定义一个函数,然后调用它,并将“hello”作为参数传递

问题中的例子是:

(function ($) {
    //majority of code here...
})(jQuery);

将jQuery传递到匿名函数中,并在函数中将其引用为$,这是一种保证$将在不干扰任何其他内容的情况下为jQuery工作的方法。

该代码将在文档上执行。ready@longbkit:不,这不是DOM就绪代码。@longbkit,不,这不是它的意思。请去看看关于结案的消息。。或者,见鬼,开始学习javascript。@Raynos为什么你不明白“这可能是一个NOOB问题”@tsdexter好的,所以基本上这样做的全部目的是让你可以在该函数内部使用$()符号调用jQuery,而在该函数外部,如果prototype之类的其他东西使用$()符号,那没关系?。。因此,实际上,当使用无冲突时,它可以避免每次都要编写jQuery()(或其他符号)。。从本质上讲,
大部分代码中的所有内容…
位都与代码的其余部分隔离。它存在于不同的范围内。如果您在那里创建
var something=1
,它不会出现在全局
窗口的范围内。此结构外部的代码无法覆盖内部的任何内容。@tsdexter:是的,您已经找到了。全局
jQuery
由本地
$
引用,这意味着全局
$
(如果有)可以用于其他目的。在JavaScript中,变量作用域是通过函数创建的。对于记录,这些被称为IIFEs–立即调用的函数表达式。:)@davidchambers:是的,这是一个比仍然流行的“自调用函数”更好的描述,它不是对正在发生的事情的正确描述。谢谢,尽管RightSaidFred比你更了解它。非常感谢。+1提到
jQuery.noConflict
,这使得jQuery放弃了全局
$
。这种结构不仅仅是jQuery构造。虽然在创建插件时可以使用它,但不需要这样做。jQuery插件是通过扩展
jQuery.prototype
创建的。出于某种原因,我对这个解释有点理解:)谢谢!