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

  • 相关阅读:
    什么是回归测试?
    单元测试、集成测试、系统测试的侧重点是什么?
    一个测试工程师应具备那些素质?
    你所了解的的软件测试类型都有哪些,简单介绍一下。
    Python
    爬虫-urllib3模块的使用
    爬图片(附,源码)
    MySQL存储引擎:MyISAM和InnoDB的区别
    员工管理系统
    MySQL锁(二)表锁:为什么给小表加字段会导致整个库挂掉?
  • 原文地址:https://www.cnblogs.com/mushishi/p/4113622.html
Copyright © 2020-2023  润新知