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

  • 相关阅读:
    WinForm笔记1:TextBox编辑时和DataGridView 单元格编辑时 的事件及其顺序
    Emgu 学习(4) 使用指针访问图像内存
    SolidWorks学习笔记1
    Emgu 学习(3) 绘图,使用鼠标绘图,使用trackbar
    NModbus4的使用
    C# async await的使用
    Emgu 学习(2) 视频文件播放
    redis-key2
    redis--key1
    rpc优化
  • 原文地址:https://www.cnblogs.com/wangjie-001/p/6056746.html
Copyright © 2011-2022 走看看