一、数组中的reduce、reduceRight方法的参数以及其使用
reduce(callback(previous,current,index,arr),initial),reduce和reduceRight方法得使用一样,只是后者是逆序对数组进行遍历。方法中一共接受两个参数,一个数回调函数,一个是初始值,用于初始化回调中的第二个参数,该参数是可选的。在没有initial参数时则previous的初始值为 数组的第一个元素, current为第二个,否则previous为initial,current为数组第一个元素,同时index表示的current的索引,arr表示数组对象。
同时上面中的回调函数的返回值将作为下一次循环时的previous
利用以上两个方法可以对数组进行扁平化:
[[1,2],[3,4],[5,6,7]].reduce(function(arr1,arr2){return arr1.concat(arr2)});
两个方法非常适合进行迭代操作的情况。
二、闭包中对象函数的引用赋值和普通对象函数的引用赋值
var value = "window";
function say() {
console.log(value);
console.log(this.value);
}
var obj1 = (function(){
var value = "1-1";
return{
value:"1-2",
say:function () {
console.log(value);
console.log(this.value);
}
}
})()
var obj2 = (function () {
var value = "2-1";
return{
value:"2-2",
say:function () {
console.log(value);
console.log(this.value);
}
}
})()
say();
obj1.say();
obj2.say();
obj1.say = say;
obj1.say();
obj1.say = obj2.say;
obj1.say();
//输出结果为
window
window
1-1
1-2
2-1
2-2
window
1-2
2-1
1-2
上面注意最后一组输出结果,其中2-1的输出是因为闭包引起的,即使将obj2的say方法赋给了obj1,但是该方法对于obj2中value行程的闭包还是存在的。