欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Javascript模式小记(一)

程序员文章站 2022-11-22 09:16:07
js总是可以在不知不觉中地创建了全局变量,其原因在于JavaScript的两个特性。 1.JavaScript可直接使用变量,甚至无需声明; 2.JavaScript有个暗示全局变量的概念,即任何变量,如果未经声明,就为全局对象所有(也就像正确声明过的全局变量一样可以访问)。 在这个例子中,resu ......

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

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