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的匿名函数与自执行 这篇文章。

  • 相关阅读:
    AttributeError: module 'scipy.misc' has no attribute 'imread'
    3.形态学
    2.几何变换_图像金字塔
    ValueError:Object arrarys cannot be loaded when allow_pickle=False
    2.几何变换_切分合并通道
    2.几何变换_遮挡
    49. Group Anagrams
    151. Reverse Words in a String
    242. Valid Anagram
    227. Basic Calculator II
  • 原文地址:https://www.cnblogs.com/wangjie-001/p/6056746.html
Copyright © 2011-2022 走看看