JavaScript/JQuery=奇怪的函数定义,语法以前从未见过?

JavaScript/JQuery=奇怪的函数定义,语法以前从未见过?,javascript,jquery,Javascript,Jquery,以下是JQueryTools中的函数,我以前从未见过以下定义,也不了解它的用途: (function (b) { ....})(jQuery); 为什么round()用大括号括住函数定义,为什么(jQuery)写在函数定义后面?这到底是做什么的。在我看来(jQuery)在这里根本没有任何功能??在哪里可以了解更多有关此语法和用途的信息 非常感谢 坦率的 (功能(b){ b、 fn.车轮=功能(e){ 返回此[e?“绑定”:“触发器”(“轮子”,e) }; b、 event.special.wh

以下是JQueryTools中的函数,我以前从未见过以下定义,也不了解它的用途:

(function (b) { ....})(jQuery);
为什么round()用大括号括住函数定义,为什么(jQuery)写在函数定义后面?这到底是做什么的。在我看来(jQuery)在这里根本没有任何功能??在哪里可以了解更多有关此语法和用途的信息

非常感谢

坦率的

(功能(b){
b、 fn.车轮=功能(e){
返回此[e?“绑定”:“触发器”(“轮子”,e)
};
b、 event.special.wheel={
设置:函数(){
b、 add(this,d,c,{})
},
拆卸:函数(){
b、 事件。删除(此、d、c)
}
};
var d=!b.browser.mozilla?“鼠标滚轮”:“DOMMouseScroll”
+(b.browser.version<“1.9”?mousemove:“);
职能c(e){
开关(e型){
案例“mousemove”:
返回b.extend(e.data{
clientX:e.clientX,
clientY:e.clientY,
pageX:e.pageX,
佩吉:佩吉
});
案例“DOMMouseScroll”:
b、 扩展(e,e.data);
e、 δ=-e.detail/3;
打破
案例“鼠标滚轮”:
e、 δ=e.车轮δ/120;
打破
}
e、 type=“车轮”;
返回b.event.handle.call(this,e,e.delta)
}
var a=b.tools.scrollable;
a、 plugins=a.plugins | |{};
a、 plugins.mouseweel={
版本:“1.0.1”,
形态:{
api:错误,
速度:50
}
};
b、 fn.鼠标滚轮=功能(f){
var g=b.extend({},a.plugins.mouseweel.conf),e;
如果(f的类型=“编号”){
f={
速度:f
}
}
f=b.延伸(g,f);
这个。每个(函数(){
var h=b(this.scrollable();
如果(h){
e=h
}
h、 getRoot().wheel(函数(i,j){
h、 移动(j<0?1:-1,f.速度| | 50);
返回错误
})
});
返回f.api?e:这个
}
})(jQuery);

它在内联定义一个匿名函数,然后立即调用该函数,并将
jQuery
参数传入

它本质上等同于

function anonymous(b) {
   ...
}

anonymous(jQuery);
除了它有几个优点/区别外:

  • 这个可能是一次性的函数不需要名称
  • 该函数不会影响全局名称空间,并且不会有任何名称冲突,也不会有任何其他代码“意外”引用它
  • 这是一种更简洁的语法,在一些不重要的情况下,显式定义一个不重要的函数然后引用它通常更清晰
事实上,如果您熟悉的话,其优点、缺点和推理与Java中的匿名内部类类似


函数定义中使用括号的原因很简单,因为Javascript中标记绑定方式的优先级;它们需要将函数定义与其参数分开。没有它们,代码的语法就不正确。

它是在内联定义一个匿名函数,然后立即调用该函数,并将
jQuery
参数传入

它本质上等同于

function anonymous(b) {
   ...
}

anonymous(jQuery);
除了它有几个优点/区别外:

  • 这个可能是一次性的函数不需要名称
  • 该函数不会影响全局名称空间,并且不会有任何名称冲突,也不会有任何其他代码“意外”引用它
  • 这是一种更简洁的语法,在一些不重要的情况下,显式定义一个不重要的函数然后引用它通常更清晰
事实上,如果您熟悉的话,其优点、缺点和推理与Java中的匿名内部类类似

函数定义中使用括号的原因很简单,因为Javascript中标记绑定方式的优先级;它们需要将函数定义与其参数分开。没有它们,代码的语法就不正确

此函数立即运行,并且 以名为的参数传递jQuery ‘$’. 因为“$”是一个局部变量,所以我们 可以假设它总是指 jQuery库,而不是另一个 抓住全局“$”的库 首先是变量。

我提到的文章使用了典型的
$
变量。在本例中,插件作者选择使用
b
。这是为了防止与可能尝试使用相同全局变量的其他Javascript库发生冲突

此函数立即运行,并且 以名为的参数传递jQuery ‘$’. 因为“$”是一个局部变量,所以我们 可以假设它总是指 jQuery库,而不是另一个 抓住全局“$”的库 首先是变量。


我提到的文章使用了典型的
$
变量。在本例中,插件作者选择使用
b
。这是为了防止与可能尝试使用相同全局变量的其他Javascript库发生冲突。

从技术上讲,此语法称为立即调用函数表达式(IIFE):从技术上讲,此语法称为立即调用函数表达式(IIFE):