首先要一个数记住每次的计算值,所以使用了闭包,在 tmp 中记住了 n 的值,第一次调用 add() ,初始化了 tmp ,并将 n 保存在 tmp 的作用链中,然后返回 tmp 保证了第二次调用的是 tmp 函数,后面的计算都是在调用 tmp , 因为 tmp 也是返回的自己,保证了第二次之后的调用也是调用 tmp ,而在 tmp 中将传入的参数与保存在作用链中 n 相加并付给 sum ,这样就保证了计算。
但是在计算完成后还是返回了 tmp 这个函数,这样就获取不到计算的结果了,需要的结果是一个计算的数字那么怎么办呢?首先要知道 JavaScript 中,打印和相加计算,会分别调用 toString 或 valueOf 函数,所以重写 tmp 的 toString 方法,返回 sum 的值。
JavaScript中的Array类型很灵活,和C语言不同,同一个Array每个位置可以存储不同的变量类型,而且数组长度可变。声明数组的方法:
var colors = new Array()
var colors = new Array(20) //长度为20的数组
var colors = new Array("red","blue","green")
var colors = ["red","blue","green"]
var colors = Array(3)
var colors = Array("bue")
arrays.length 可以获取colors数组的长度。这个长度不是只读的,而是可变的!
var arrays = ["red","blue","green"] // 有三个元素,长度为3
arrays.length = 2 //将arrays数组长度设为2后
alert(arrays[2]) //Undefined 第三个元素为Undefined
将长度增大或者缩短之后超出原来数组长度或者小于新数组长度的部分的值为undefined
检测当前对象事都是数组的方法:
if(value instanceif Array){
}
if(Array.isArray(value)){
}
value为要检测的对象
JavaScript的数组可以当做栈来处理,也可以当做队列或者双向队列处理,甚至能把栈,队列,双向队列的特点和方法集合起来。
我们可以用下面的一些方法来对数组进行任意的插入删除操作。
栈方法:后进先出
push() :方法可以接收任意数量的参数,把他们添加到数组末尾,并返回修改后数组的长度。
pop() :方法则从数组末尾移除最后一项,减少数组的length,然后返回移除的项。
队列方法:先进先出
shift():移除数组中的第一个项并返回该项,长度减1
结合使用shift()和push()方法,可以想使用队列一样使用数组,后端添加,前端删除
Unshift():在数组前端添加任意个项并返回新数组的长度
结合使用unshift()和pop()方法,从相反的方向来模拟队列,即在数组的前端添加项,在后端移除
var colors = new Array()
var count = colors.push("red","green")
alert(count) //2
var item = colors.shift() //队列出队操作
alert(item) //"red"
colors.unshift("red") //从前边插入
重排序方法:
sort()方法:
sort在排序时都用toString把数据转换成字符串形式:
var values = [0,1,5,10,15]
values.sort()
alert(values) // 0 ,1 ,10, 15 ,5
要实现对数的排序,需要写一个比较函数:
function compare(value1,value2){
if(value1 <value2){
return -1
}else if(value1 >value2){
return 1
}else return 0
}
values.sort(compare)
reverse()方法:反转数组项的顺序
操作方法:
1、contact():基于当前数组中的所有项创建一个新数组,而不是在当前数组上直接拼接。
colors.contact(["black","yellow"]) //contact用来拼接数组,把参数数组拼接到colors的后面
2、slice():基于当前数组中的一个或多个项创建一个新数组,可接收一或两个参数,即要返回项的起始和结束位置。若参数中有一个负数,则用数组长度加上该数来确定相应的位置
var colors = ["red","blue","green"]
var colors2 = colors.slice(1) //返回从数组下标1到最后缩构成的一个数组
var colors3 = colors.slice(1,4) //
返回从数组下标1--3构成的一个数组
3、splice()方法:删除、插入、替换
删除:当splice方法指定两个参数时,color.splice(1,3)表明删除从下标1开始连续三项
插入:当splice指定三个参数:起始位置、0、插入的项,color.splice(2,0,"red","green") 表明从下标2开始插入“red”和“green”
替换:color.splice(1,2,"red","green") 表明先删除下标1开始的连续两项,在从下标1开始插入“red”和“green”
位置方法:
indexOf()方法:
colors.indexOf(value) 从数组开头开始查找value,返回value的下标,如果没找到返回-1 。在查找时要求严格查找,相当于===
lastIndexOf()方法:从数组的末尾开始向前查找