有人可以解释以下功能之间的区别吗:
(function($){
// can do something like
$.fn.function_name = function(x){};
})(jQuery);
我可以在下一个函数中使用 jQuery 吗?
(function(){
}());
以下是否与 jquery.ready() 相同?
$(function(){
});
谢谢!
有人可以解释以下功能之间的区别吗:
(function($){
// can do something like
$.fn.function_name = function(x){};
})(jQuery);
我可以在下一个函数中使用 jQuery 吗?
(function(){
}());
以下是否与 jquery.ready() 相同?
$(function(){
});
谢谢!
(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
到处使用关键字,而不是$
仍然不必担心碰撞。So$
包含在简写的参数中,以便您可以在该函数内部编写$
而不是在jQuery
周围编写。
(function(){
}());
那又是自动执行的匿名函数,但没有参数,并且因为()
最后而运行/调用自身。
事实证明,这种模式在某些情况下非常有用。例如,假设您想在每次 500 毫秒后运行一段代码,您自然会选择setInterval
.
setInterval(doStuff, 500);
但是如果doStuff
函数需要超过 500 毫秒来完成它正在做的事情呢?你会看到意想不到的结果,但setInterval
无论是否doStuff
完成,都会在指定的时间一次又一次地调用该函数。
这就是该模式的用武之地,你可以setTimeout
结合自执行匿名函数来做同样的事情,避免像这样的坏事 setInterval
:
(function foo(){
doStuff;
setTimeout(foo, 500);
})()
这段代码也会一次又一次地重复,但有一个区别。setTimeout
除非doStuff
完成,否则永远不会被触发。比使用 bad 更好的方法setInterval
。
请注意,您还可以像这样编写自执行匿名函数:
function(){
// some code
}();
在周围使用额外的大括号(如 beforefunction
关键字)只是编码约定,可以在 Crackford 的着作、jQuery 和其他地方看到。
$(function(){
});
这是就绪处理程序的简写语法:
$(document).ready(function(){
});
更多信息:
我知道这个问题很老,但我现在偶然发现了它,其他人也可能如此。我只是想指出的是,虽然Sarfraz的答案是伟大的,但必须说,没有,写一个自动执行的,匿名函数括号内是不是一个编码约定。
function(){
// some code
}();
不会工作并给出 aSyntaxError
因为函数被解析为 a FunctionDeclaration
,并且在这种情况下函数名称不是可选的。
另一方面,分组运算符确保内容被评估为FunctionExpression
.