(function($){
// can do something like
$.fn.function_name = function(x){};
})(jQuery);
这是在参数中使用$ 的自执行匿名函数,因此您可以在该函数中使用它($)而不是jQuery,并且不必担心与其他库发生冲突,因为在其他库中也是如此$ 有特殊含义。这种模式在编写 jQuery 插件时特别有用。
你也可以在那里写任何字符而不是$:
(function(j){
// can do something like
j.fn.function_name = function(x){};
})(jQuery);
这里j 会自动追上jQuery 末尾指定的(jQuery)。或者你可以完全忽略这个论点,但是你将不得不使用 jQuery 关键字而不是 $ ,而且仍然不用担心碰撞。所以$ 被包裹在速记的参数中,这样你就可以在该函数的周围写$ 而不是jQuery。
(function(){
}());
这又是一个自动执行的匿名函数,但没有参数并且运行/调用自己,因为最后是()。
事实证明,这种模式在某些情况下非常有用。例如,假设您想每次运行 500 毫秒后运行一段代码,您自然会选择setInterval。
setInterval(doStuff, 500);
但是如果doStuff 函数需要超过 500 毫秒才能完成它正在做的事情呢?您会看到意想不到的结果,但setInterval 将在指定时间一次又一次地调用该函数,而不管doStuff 是否完成。
这就是该模式的用武之地,您可以将 setTimeout 与自执行匿名函数结合使用,并避免 bad setInterval 像这样:
(function foo(){
doStuff;
setTimeout(foo, 500);
})()
这段代码也会一次又一次地重复,但有一点不同。 setTimeout 永远不会被触发,除非 doStuff 完成。比使用糟糕的setInterval 更好的方法。
You can test it here.
请注意,您也可以像这样编写自执行匿名函数:
function(){
// some code
}();
在周围使用额外的大括号(如function 关键字之前)只是编码约定,可以在 Crackford 的著作、jQuery 和其他地方看到。
$(function(){
});
这是就绪处理程序的简写语法:
$(document).ready(function(){
});
更多信息: