一、數組中的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行程的閉包還是存在的。