创建数组
在JavaScript多种方式创建数组
构造函数
1.无参构造函数,创建一空数组
var a1 = new Array();
2.一个数字参数构造函数,指定数组长度(由于数组长度可以动态调整,作用并不大),创建指定长度的数组
var a2 = new Array(5);
3.带有初始化数据的构造函数,创建数组并初始化参数数据
var a3 = new Array(4,'hello',new Date());
字面量
1.使用方括号,创建空数组,等同于调用无参构造函数
var a4=[];
2.使用中括号,并传入初始化数据,等同于调用调用带有初始化数据的构造函数
var a5=[10];
注意点
1.在使用构造函数创建数组时如果传入一个数字参数,则会创建一个长度为参数的数组,如果传入多个,则创建一个数组,参数作为初始化数据加到数组中
var a1=new Array(5);
console.log(a1.length);//5
console.log(a1); //[] ,数组是空的
var a2=new Array(5,6);
console.log(a2.length);//2
console.log(a2); //[5,6]
但是使用字面量方式,无论传入几个参数,都会把参数当作初始化内容
var a1=[5];
console.log(a1.length);//1
console.log(a1); //[5]
var a2=[5,6];
console.log(a2.length);//2
console.log(a2); //[5,6]
2.使用带初始化参数的方式创建数组的时候,最好最后不要带多余的”,”,在不同的浏览器下对此处理方式不一样
var a1=[1,2,3,];
console.log(a1.length);
console.log(a1);
这段脚本在现代浏览器上运行结果和我们设想一样,长度是3,但是在低版本IE下确实长度为4的数组,最后一条数据是undefined!
要理解闭包,首先理解两点:变量的作用域以及作用域链,这两个在前面都已经介绍过了,并且举了简单了列子,来回顾一下:
var color = "blue";
function changeColor(){
var anotherColor = "red";
function swapColors(){
var tempColor = anotherColor;
anotherColor = color;
color = tempColor;
//在 swapColors函数里面可以访问tempColor,anotherColor和color
}
//在这里可以访问anotherColor和color,但不能访问tempColor
swapColors();
}
上面的代码,我们之前用来说明作用域链,也就是变量从里往外找变量,这一简单的概念。但是,现在反过来,如果,我们需要在一个外部执行环境里面,访问内部执行环境的变量怎么办呢?
function f1(){
var n=999;
function f2(){
alert(n); // 999
}
//f2();
}
上面的代码很简单,我们在f1里面去调用f2()当然可以弹出n的值999,但是如果我们在外部全局执行环境里面还要获得n的值,这又该怎么办?这就是刚刚的提问,外部的执行环境要求访问内部执行环境的值。 从外往里访问,这里就可以通过闭包来实现这个效果,把上面的代码稍作修改:
function f1(){
var n=999; //私有变量
//在函数f1内定义另外的函数作为f1的方法函数
function f2(){
alert(n); //引用外层函数f1的临时变量n
}
return f2; //返回内部函数
}
//调用函数
var result=f1();
result(); // 999
当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包