zoukankan      html  css  js  c++  java
  • JS 经典代码段总结 start from 2016-08-22

    1、for(var i = 0, max = myArray.length; i < max ; i++){

            //用myArrayy[i]来做点什么  

      }

      用max存储myArray的长度,防止每次循环去读取数组长度,尤其是当设计到DOM节点集合时,可明显提高效率。(2016-08-22)

    2、function foo(){

             var a = b = 0;   

    }

      b会声明为全局变量。原因是:从右到左的赋值过程,首先是 b = 0 ,此情况下b是未声明的,然后是 var a  = b;实际顺序为 var  a = ( b = 0);(2016-08-22)

    3、switch模式(switch Pattern)

       可以通过类似下面形式的switch语句增强可读性和健壮性:

        var inspect_me = 0,

             result = '';

        switch(inspect_me){

        case 0:

            result = 'zero';

            break;

         case 1:

             result = 'one';

             beak;

         default:

             result = 'unknown';

        }

    4、适合使用空格的地方包括:

    -> for循环分号分开后的部分:如for(var i = 0; i < 10; i++){...}

    -> for循环中初始化的多变量(i和max): for(var i = 0, max = 10; i < max; i++){...}

    -> 分隔数组项的逗号的后面: var a = [1, 2, 3];

    -> 对象属性逗号的后面以及分隔属性名和属性值的冒号的后面: var o = {a: 1, b: 2};

    -> 限定函数参数: myFunction(a, b, c)

    -> 函数声明的花括号的前面: function myFunc() {...}

    -> 匿名函数包大师function的后面:var myFunc = function () {};

    5、JS 表达式和声明存在着十分微妙的差别。首先,函数声明会在任何表达式被解析 和求值之前 先被解析和求值,即使你的声明在代码的最后一行,它也会在同作用域内第一个表达式之前被解析/求值,参考如下例子,函数fn是在alter之后声明的,但是在alert执行的时候,fn已经有定义了:

    alert(fn());

    function fn(){

        return 'Hello World ...';

    }

    6、var f = function foo(){
              return typeof foo; // foo是在内部作用域内有效
    }

       //foo 在外部作用域是不可见的

       typeof foo ; // "undefined"

       f();// "function"

    7、Module模式的基本特征:

    -> 模块化,可重用;

    -> 封装了变量和function,和全局的namespace不接触,松耦合

    -> 只暴露可用public方法,其它是由方法全部隐藏

    var Calculator = function(eq){

           //这里可以声明是由成员

          var eqCt1 = document.getElementById(eq);

          return {

               //暴露公开的成员

               add: function(x, y){

                   var val = x + y;

          eqCtl.innerHTML = val;

               }

          }

    }

    我们可以通过如下的方式来调用:

    var calvulator = new Clculator('eq');

    calculator.add(2,2);

    8、引用全局变量

    JavaScript有一个特性叫做隐式全局变量,不管一个变量有没有用过,JavaScript解释器反向遍历作用域链来查找整个变量的var声明,如果没有找到var,解释器则假定该变量是全局变量,如果该变量用于了赋值操作的话,之前如果不存在的话,解释器则会自动创建它,这就是说在匿名闭包里使用或创建全局变量非常容易,不过比较困难的是,代码比较难管理,尤其是阅读代码的人看着很多区分哪些变量是全局的,哪些是局部的。

    不过,好在在匿名函数里我们可以提供一个比较简单的替代方案,我们可以将全局变量当成一个参数传入到匿名函数然后使用,相比隐式全局变量,它又清晰又快,我们来看一个例子:

    (function($, YAHOO){

    // 这里,我们的代码就可以使用全局的jQuery对象了,YAHOO也是一样

    })(jQuery, HAHOO);

    现在很多类库里都有这种使用方式,比如jQuery源码。

    不过,有时候可能不仅仅要使用全局变量,而是也想声明全局变量,如何做呢?我们可以通过匿名函数的返回值来返回这个全局变量,这也就是一个基本的Module模式,来看一个完整的代码:

    var blogMoudle = (function(){

      var  my = {}, privateName  = '博客园 ';

      function privateAddTopic(data){

        //这里是内部处理代码

      }

      my.Name = privateName;

      my.AddTopic = function(data){

        privateAddTopic(data);

      };

      return my;

    })();

    上面的代码声明了一个全局变量blogModule,并且带有2个可访问的属性:blogModule.AddTopic和blogModule.Name,除此之外,其它代码都在匿名函数的闭包里保持着私有状态。同时根据上面传入全局变量的例子,我们也可以很方便地传入其它的全局变量。

  • 相关阅读:
    python內建模块之datetime
    python实现两个经纬度点之间的距离和方位角
    Python实现DBScan
    关于sru源码class Model的parameters
    pytorch之LSTM
    pytorch对可变长度序列的处理
    pytorch函数之torch.normal()
    PyTorch学习系列(九)——参数_初始化
    ubuntu16.04系统搜狗输入法的安装
    Scala 匿名函数
  • 原文地址:https://www.cnblogs.com/xuqiuyu/p/5796242.html
Copyright © 2011-2022 走看看