当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 学习JS需要掌握的五点要素

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

2018年09月14日  | 移动技术网IT编程  | 我要评论

一、全局变量

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

        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更加安全。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网