yre*_*uta 18 javascript jquery mootools
这是什么意思?
(function($){
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
使问题更清晰,什么包裹在括号中的函数JS的意思(对不起,我在封闭的概念有些混乱).$参数怎么样?和最后括号中的"jQuery"?
我可以用mootools做同样的事情并将它们组合在1个JS文件中吗?
(function($){})(jQuery);
(function($){})(mooTools);
Run Code Online (Sandbox Code Playgroud)
我只与jquery合作,并计划与Mootools合作
CMS*_*CMS 24
在括号之间包装函数可确保将此函数作为函数表达式进行求值.
这是因为分组运算符(括号)只能计算表达式.
如果没有使用括号,它将被解释为函数声明,并且它将导致语法错误,因为函数名称对于函数声明不是可选的.
(function(arg){
alert(arg); // alerts test
})("test");
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,函数表达式自动执行,传递参数.
jQuery插件大量使用该模式,因为jQuery可以在noConflict模式下运行,$不会创建全局变量,因此jQuery全局对象作为此匿名函数的参数传递,并且在该函数内部,您可以自由引用它$(收到的论据).
请记住,this与上面示例一样调用的自执行函数表达式中的函数上下文(关键字)也将始终引用Global对象.
有关函数表达式和函数声明之间差异的更深入信息,请查看以下资源:
CMS给了你正确的答案,但我只想补充一点,这不是一个闭包.这只是用于返回表达式结果的()运算符,在本例中是一个函数表达式,并且在javascript中,可以直接调用返回的匿名函数.所以这只是两者结合:
var x = (1+1); // <-- () evaluates an expression
Run Code Online (Sandbox Code Playgroud)
和:
var arr = [0,1,2];
arr.push(function(text){alert(text)});
arr[3]('hello'); // <-- function returned by array called directly
Run Code Online (Sandbox Code Playgroud)
至于$参数,这只是javascript允许变量名称的一个字符.您的示例完全相同于:
(function(jQ){})(jQuery);
(function(moo){})(mooTools);
Run Code Online (Sandbox Code Playgroud)
这样做的要点是,在函数表达式中创建的对象可以从附加到传入对象的属性和方法中使用,而不公开公开这些对象.这有助于防止可变碰撞.它还允许创建的变量作为附加任何内容的私有存储进行访问.
(function($){
//jQuery is available here as $
var myPrivateArray = []; //this is private
$.addItem = function(item) {
myPrivateArray.push(item);
}
})(jQuery);
//I can't access myPrivateArray here...
//but I can use jQuery.addItem to add something.
| 归档时间: |
|
| 查看次数: |
7760 次 |
| 最近记录: |