zoukankan      html  css  js  c++  java
  • 匿名函数和闭包的使用

         1. 什么是自执行的匿名函数?     
         它是指形如这样的函数: (function {// code})();
        2. 疑问 为什么(function {// code})();可以被执行, 而function {// code}();却会报错?
        3. 分析     
           (1). 首先, 要清楚两者的区别:     (function {// code})是表达式, function {// code}是函数声明.     
           (2). 其次, js"预编译"的特点:     js在"预编译"阶段, 会解释函数声明, 但却会忽略表式.     
           (3). 当js执行到function() {//code}();时, 由于function() {//code}在"预编译"阶段已经被解释过, js会跳过function(){//code}, 试图去执行();, 故会报错;     
        当js执行到(function {// code})();时, 由于(function {// code})是表达式, js会去对它求解得到返回值, 由于返回值是一 个函数, 故而遇到();时, 便会被执行.

       另外, 函数转换为表达式的方法并不一定要靠分组操作符(),我们还可以用void操作符,~操作符,!操作符……

      例如:
       bootstrap 框架中的插件写法:
       !function($){
      //do something;
       }(jQuery);

       和 
       (function($){
      //do something;
       })(jQuery); 是一回事。

    匿名函数最大的用途是创建闭包(这是JavaScript语言的特性之一),并且还可以构建命名空间,以减少全局变量的使用。
    例如:
         var a=1;
         (function()(){
        var a=100;
      })();
          alert(a); //弹出 1
    更多 闭包和匿名函数 可查看 Javascript的匿名函数与自执行 这篇文章。

  • 相关阅读:
    17. Letter Combinations of a Phone Number
    77. Combinations
    90. Subsets II
    78. Subsets
    275. H-Index II
    154. Find Minimum in Rotated Sorted Array II
    153. Find Minimum in Rotated Sorted Array
    树状数组区间查询和单点更新
    树状数组区间查询和单点更新
    最小生成树 kuangbin专题最后一个题
  • 原文地址:https://www.cnblogs.com/wangjie-001/p/6056746.html
Copyright © 2011-2022 走看看