那些事

创建数组

在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

当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包

原文地址:https://www.cnblogs.com/pulang/p/4101348.html