改善Java Script程序的建议(二)
2016-01-27 16:36
267 查看
1、数组长度的有限性和无限性
var myArray = [];
myArray.lenght; // 0
myArray[10000] = true;
myArray.length // 10001
根据 ECMAScript 标准,数组的下标必须是大于或等于0且小于2^32 -1 的证书。
我们可以指定数组的长度,这将导致所有下标大于或等于新 length 的元素被删除。
2、建议使用 splice 删除数组
由于数组其实就是对象,因此使用 delete 运算符可以从数组中移除元素。但是移除下标位置元素后,会在数组中遗留一个空洞。
例如:
splice 删除元素,如下
3、使用 arguments 模拟重载
4、建议使用闭包跨域开发
演示步骤说明:
第一步,程序预编译之后,从第9行开始解析执行,创建上下文环境,创建调用对象,把参数、局部变量、内部的函数转换为对象的属性。
第二步,执行函数体内代码。在第6行执行局部变量 a 的递加运算,并把这个值传递给对象属性a,内部函数动态保持与局部变量 a 的联系,同时更新自己内部调用变量的值。
第3步,外部函数把内部函数返回给全局变量c,实现内部函数的定义,此时 c 完全继承了内部函数的所有结构和数据。
第4步,外部函数返回后(即返回之后调用完毕)会自动销毁,内部的结构、标识符和数据也随之丢失。
第5步,执行第10行代码命令,调用内部函数,此时返回的是外部函数返回时(销毁之前)保存的变量a 所存储的最新数据值,即返回6。
function f(){
var a = 1;
b = function(){
alert(a);
}
c = function(){
a++;
}
d = function( x ){
a = x;
}
}
f();
b(); // alert(1);
c();b(); // alert(2);
d(100);b(); // alert(100);
5、在循环体和异步回调中慎重使用闭包
6、通过 Function 扩展类型
7、原型属性和本地特性之间的关系
8、合理使用原型
本地属性覆盖原型属性
function p(x){
this.x = x;
}
p.prototype.x = 1;
var p1 = new p(10);
alert(p1.x); // 本地属性覆盖原型属性
但是原型属性并没有被删除,它依然存在,仅是被覆盖
var myArray = [];
myArray.lenght; // 0
myArray[10000] = true;
myArray.length // 10001
根据 ECMAScript 标准,数组的下标必须是大于或等于0且小于2^32 -1 的证书。
我们可以指定数组的长度,这将导致所有下标大于或等于新 length 的元素被删除。
2、建议使用 splice 删除数组
由于数组其实就是对象,因此使用 delete 运算符可以从数组中移除元素。但是移除下标位置元素后,会在数组中遗留一个空洞。
例如:
splice 删除元素,如下
3、使用 arguments 模拟重载
4、建议使用闭包跨域开发
演示步骤说明:
第一步,程序预编译之后,从第9行开始解析执行,创建上下文环境,创建调用对象,把参数、局部变量、内部的函数转换为对象的属性。
第二步,执行函数体内代码。在第6行执行局部变量 a 的递加运算,并把这个值传递给对象属性a,内部函数动态保持与局部变量 a 的联系,同时更新自己内部调用变量的值。
第3步,外部函数把内部函数返回给全局变量c,实现内部函数的定义,此时 c 完全继承了内部函数的所有结构和数据。
第4步,外部函数返回后(即返回之后调用完毕)会自动销毁,内部的结构、标识符和数据也随之丢失。
第5步,执行第10行代码命令,调用内部函数,此时返回的是外部函数返回时(销毁之前)保存的变量a 所存储的最新数据值,即返回6。
function f(){
var a = 1;
b = function(){
alert(a);
}
c = function(){
a++;
}
d = function( x ){
a = x;
}
}
f();
b(); // alert(1);
c();b(); // alert(2);
d(100);b(); // alert(100);
5、在循环体和异步回调中慎重使用闭包
6、通过 Function 扩展类型
7、原型属性和本地特性之间的关系
8、合理使用原型
本地属性覆盖原型属性
function p(x){
this.x = x;
}
p.prototype.x = 1;
var p1 = new p(10);
alert(p1.x); // 本地属性覆盖原型属性
但是原型属性并没有被删除,它依然存在,仅是被覆盖
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享
- 如何创建对象以及jQuery中创建对象的方式
- 数组方法汇总