【學習筆記】面試中遇到的盲區(2)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章