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

学习JS需要掌握的五点要素

程序员文章站 2022-05-04 09:25:06
一、全局变量         在任何函数外面声明的或是未声明直接简单使用的。         1、全局变量与隐式全局变...

一、全局变量

        在任何函数外面声明的或是未声明直接简单使用的。

        1、全局变量与隐式全局变量的区别

通过var创建的全局变量(任何函数之外的程序中创建)是不能被delete操作符删除的。

无var创建的隐式全局变量(无视是否在函数中创建)是能被delete操作符删除的。

二、代码处理

    代码处理一般分为两个阶段:

        1、第一阶段是变量,函数声明,以及正常格式的参数创建,这是一个解析和进入上下文的阶段。

        2、第二个阶段是代码执行,函数表达式和不符合的标识符(未声明的变量)被创建的阶段。

三、for 循环

[html] view plain copy

for (var i = 0; i < arr.length; i ++) {  

    console.log(arr[i]);  

}  

    这种循环的不足在于每次循环的时候数组长度都要重新获取,尤其当arr不是数组,而是一个htmlcollection对象的时候。每次访问时都要查询dom,这个成本代价是昂贵的。

    解决办法:

[javascript] view plain copy

for (var i = 0, max = arr.length; i < len; i ++) {  

    console.log(arr[i]);  

}  

/* 性能提升 */  

// 第一种变化的形式:  

var i, arr = [];  

for (i = arr.length; i–-;) {  

   console.log(arr[i]);  

}  

// 第二种使用while循环:  

var arr = [], i = arr.length;  

while (i–-) {  

   console.log(arr[i]);  

}  

四、for in 循环

    一般for in 循环用于对象的遍历,也被成为“枚举”。有个很重要的方法hasownproperty()方法可以过滤原型链上的属性。例如:

[javascript] view plain copy

// 对象  

var man = {  

   hands: 2,  

   legs: 2,  

   heads: 1  

};  

// 在原型链上添加属性  

if (typeof object.prototype.clone === "undefined") {  

   object.prototype.clone = function () {};  

}  

// 直接输出  

for (var i in man) {  

   console.log(i, ":", man[i]);  

}  

/* 

控制台显示结果 

hands : 2 

legs : 2 

heads : 1 

clone: function() 

*/  

// 过滤原型链上的clone属性  

for (var i in man) {  

   if (man.hasownproperty(i)) { // 过滤  

      console.log(i, ":", man[i]);  

   }  

}  

/* 控制台显示结果 

hands : 2 

legs : 2 

heads : 1 

*/  

五、避免使用eval()

    eval可以干扰作用域链,也可以访问和修改外部作用域中的变量,function的构造方式虽然与eval类似,但是function更加安全。