首页 > 代码库 > 关于js中立即执行的匿名函数写法

关于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(){}()

关于js中立即执行的匿名函数写法