关于js中立即执行的匿名函数写法
1 /*最流行的写法*/ 2 (function() { 3 alert("run!") 4 })(); 5 6 /* !号可以有1~正无穷个,所以这一种就可以衍生无数种方式 */ 7 !!!(function() { 8 alert("run!") 9 })(); 10 11 (function() { 12 alert("run!") 13 }).call(); 14 15 (function() { 16 alert("run!") 17 }).apply(); 18 19 (function() { 20 alert("run!") 21 }()); 22 23 void(function() { 24 alert("run!") 25 })(); 26 27 ~(function() { 28 alert("run!") 29 })(); 30 31 ~!(function() { 32 alert("run!") 33 })(); 34 35 /* 这个最好玩 */ 36 delete(function() { 37 alert("run!") 38 })(); 39 40 + (function() { 41 alert("run!") 42 })(); 43 44 - (function() { 45 alert("run!") 46 })(); 47 48 setTimeout(function() { 49 alert("run"); 50 }, 0); 51 52 /*自由变态组合,可以衍生出无数种方式*/ 53 ~+-!(function() { 54 alert("run!") 55 })();
上面是直接扣别人整理的 ,所有的方式都将匿名函数用小括号给包起来调用; 而我在学习bootstrap.js 里边的插件写法时候遇到却不用 如下
1 // 1. 定义立即调用的函数 2 +function($){ 3 "use strict"; //使用严格模式ES5支持 4 //后续步骤 5 // 2. xx 插件类及原型方法的定义 6 // 3. 在jQuery上定义xx插件,并重设插件构造器 7 // 4. 防冲突处理 8 // 5. 绑定触发事件 9 }(window.jQuery)
今天有些了一个倒计时跳转的js时, 还是以为直接 function(){}() 这样就可以调用了,结果试了半天都不可以; 最后还是用最正统的 (function(){})() 写法才成功;
接着尝试发现 bootstrap那种写法只有前面符号是 ~!+- 这几个才能成功(也就是上面 最后一种写法), 难道是通过运算符执行后面的语句?
顺便贴上代码
var countdown=10; var $btnBack=document.getElementById("btnBack"); +function (){ if(countdown>0) { $btnBack.innerHTML=countdown+" seconds left"; setTimeout(arguments.callee,1000); countdown--; } else { alert("over"); } }();
结论:如果不将匿名函数用小括号包起来 前面就必须加上 ~!+- 中的一个或多个或组合。。。
~function(){}()
!function(){}()
+function(){}()
-function(){}()
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。