网上说:小括号能把我们的表达式组合分块,并且每一块,也就是每一对小括号,都有一个返回值。这个返回值实际上也就是小括号中表达式的返回值。
所以,当我们用一对小括号把匿名函数括起来的时候,实际上小括号对返回的,就是一个匿名函数的Function对象。
因此,小括号对加上匿名函数就如同有名字的函数般被我们取得它的引用位置了。所以如果在这个引用变量后面再加上参数列表,就会实现普通函数的调用形式。
alert((function (x, y) { return x + y; })(2, 3)); // "5" alert((new Function("x", "y", "return x*y;"))(2, 3)); // "6" alert(function (x, y) { return x + y; }(2, 3)); // "5" alert(new Function("x", "y", "return x*y;")(2, 3)); // "6"
var hon = function () { alert("fd"); } () //hon是undefined,不是方法 var Class = { fun: function () { return function (a) { // 1 alert(a); } }() } var Class2 = { fun: function () { // 2 return function (a) { alert(a); } } } Class.fun("hongda"); // 1 这里执行到function()时,有小刮号直接执行,fun就相当于function(a) Class2.fun("hongdada"); //2 相当于function()
Class2.fun()("hongdada"); //与1等效
(Class2.fun())("hongdada"); //有效 以毒攻毒,七步之内必有解药 小刮号就用小刮号对付 兵对兵,将对将
jquery插件的模式
(function ($) { //code })(jQuery); var jq = function ($) { //code }); jq(jQuery);
这两个是等效的
好处:1.避免全局依赖
2.避免第三方破坏
3.兼容jQuery操作符"$"和"jQuery"