javascript匿名函数 重点内容
提问:不同?
1 这个最常用的 (function() { alert('test'); })(); 2 (function(){ alert('test'); }()); 3 ~(function(){ alert('test'); })(); 4 void function(){ alert('test'); }(); 5 +function(){ alert('test'); }(); 6 -function(){ alert('test'); }(); 7 ~function(){ alert('test'); }(); 8 !function(){ alert('test'); }(); 9 (function(){ alert("test"); }).call(); 10 (function(){ alert("test"); }).apply(); 11 delete (function(){ alert("test"); })(); 12 ~!(function(){ alert("run!") })(); 13 ~+-!(function(){ alert("test"); })();
-------------------------------------------------------------------------------------------------------------------------------------------------
A1:
-
4 票
-
看了你的问题,这是个好问题,但是这些只是JavaScript的匿名函数不同的写法罢了,至于用哪种方法可以随便选择,但是要考虑到代码的可读性。其它的都无所谓。以下我给你说明了各种写法的作用和原因:
1 //这样代表是一个"函数字面量":首先声明一个函数对象,然后执行它,这是最常见的写法 2 (function() { alert('test');})(); 3 4 //优先表达式:由于Javascript执行表达式是从圆括号里面到外面,所以可以用圆括号强制执行声明的函数。 5 (function(){ alert('test');}()); 6 7 //Void操作符:用void操作符去执行一个没有用圆括号包围的一个单独操作数,据说这种写法效率最高。 8 void function(){ alert('test');}(); 9 10 //以下几种前面带符号的只能算是一种技巧,只不过中把"函数声明"让JavaScript解释成"函数表达式" 11 ~(function(){ alert('test');})(); 12 +function(){ alert('test');}(); 13 -function(){ alert('test');}(); 14 ~function(){ alert('test');}(); 15 !function(){ alert('test');}(); 16 ~!(function(){ alert("run!") })(); 17 ~+-!(function(){ alert("test"); })(); 18 19 //让函数表达式通过call()或者是apply()调用"函数表达式"自身 20 (function(){ alert("test");}).call(); 21 (function(){ alert("test");}).apply(); 22 23 //delete本意是用来删除对象的属性,但用在这里就相当于把"函数声明"让JavaScript解释成"函数表达式" 24 delete (function(){ alert("test");})();
---------------------------------------------------------------------------------------------------------------------------------------------------
-
3 票
-
js 匿名函数定义调用,这里其实严格上说只是调用,匿名匿名就是省略所谓的定义步骤。正确调用匿名函数有下面三种
1、执行后得到返回值的函数调用
//方式1,调用函数,得到返回值。强制运算符使函数调用执行 (function(x,y){ alert(x*y); return x*y; }(1,2)); //方式二,调用函数,得到返回值。强制函数直接量执行再返回一个引用,引用再去调用执行 (function(x,y){ alert(x*y); return x*y; })(1,2);
这里有必要解释一下:
小括号能把我们的表达式组合分块,并且每一块,也就是每一对小括号,都有一个返回值。这个返回值实际上也就是小括号中表达式的返回值。
所以,当我们用一对小括号把匿名函数括起来的时候,实际上小括号对返回的,就是一个匿名函数的Function对象。
因此,小括号对加上匿名函数就如同有名字的函数般被我们取得它的引用位置了。
所以如果在这个引用变量后面再加上参数列表,就会实现普通函数的调用形式。
举个例子,(function(){alert('test')})()应该是与a=function(){alert('test')}()等价。
2、执行后忽略返回值
//方式三,调用函数,忽略返回值 void function(x,y) { alert(x*y); }(1,2);