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

原文地址:https://www.cnblogs.com/mushishi/p/4113622.html