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]进行处理
}

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

posted @ 2019-02-12 09:55  bule蓝色  阅读(284)  评论(0编辑  收藏  举报