【学习笔记】面试中遇到的盲区(2)

来源:互联网 发布:大腿内侧黑色素知乎 编辑:程序博客网 时间:2024/06/07 05:35

一、数组中的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();//输出结果为windowwindow1-11-22-12-2window1-22-11-2

上面注意最后一组输出结果,其中2-1的输出是因为闭包引起的,即使将obj2的say方法赋给了obj1,但是该方法对于obj2中value行程的闭包还是存在的。

原创粉丝点击