zoukankan      html  css  js  c++  java
  • Javascript模式小记(一)

    js总是可以在不知不觉中地创建了全局变量,其原因在于JavaScript的两个特性。

    1.JavaScript可直接使用变量,甚至无需声明;

    2.JavaScript有个暗示全局变量的概念,即任何变量,如果未经声明,就为全局对象所有(也就像正确声明过的全局变量一样可以访问)。

    function sum(x,y){
        //反模式:暗示全局变量
        result=x+y;
        return result;
    }
    

    在这个例子中,result未经声明就使用了。代码虽然在一般情况下可以正常工作,但如果在调用该函数后,在全局命名空间使用了另外的result变量,问题就会出现。此函数中的ruslt变量为全局变量。

    另一种创建饮食全局变量的反模式是带有var声明的链式赋值。在下面的代码中,a是去不变量,b是全局变量。

    //反模式,不要使用
    function foo(){
        var a=b=0;
        //...
    }
    

    避免全局变量的另一个原因在于代码移植,如果你希望你的代码运行在不同的环境中(主机),使用全局变量就会非常危险。因为可能很偶然地,不存在与原环境(所以看起来非常安全的),但存在于其他环境的主句变量就被覆盖了。

    for循环

    for循环经常用在遍历数组或类数组对象,如引数(arguments)和HTML容器对象。通常for循环模式使用如下。

    //次优循环
    for(var i=0;i<marggay.length;i++){
        //对ayarray[i]做操作
    }
    

    这种模式的问题在于每次循环迭代是都要访问数据的长度。这样会是代码变慢,特别是当ayarray不是数据,而是HTML容器对象时。容器的麻烦在于它们在document (HTML页面)下是活动的查询。也就是说,每次访问任何容器的长度时,也就是在查询活动的DOM,而通常DOM操作是非常耗时的。

    所以一般好的for循环模式是将已经遍历过的数组(或容器)的长度缓存起来。

    for(var i = 0, max = myarray.length; i < max; i++){
        //对myarray[i]进行处理
    }
    

    这种方式下,对长度的值只提取一次,但应用到整个循环中。

  • 相关阅读:
    线性dp 打鼹鼠
    区间dp 能量项链 洛谷p1063
    洛谷 CF1012C Hills (动态规划)
    交作业了 动态规划 木棍加工
    最短路之Floyd
    最小生成树
    寒假集训并查集初级版
    【倍增DP】——保卫王国
    bootstrap四部分概述
    zrender初识
  • 原文地址:https://www.cnblogs.com/BULE-bule/p/10364049.html
Copyright © 2011-2022 走看看