filter:
它用于把Array
的某些元素过滤掉,然后返回剩下的元素
filter()
把传入的函数依次作用于每个元素,然后根据返回值是true
还是false
决定保留还是丢弃该元素
var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
return x % 2 !== 0;
});
console.log("+++++++++++++",arr); 1, 2, 4, 5, 6, 9, 10, 15 不会改变原数组
console.log("+++++++++++++",r); 1 5 9 15
闭包
<script>
// reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。对空数组是不会执行回调函数的。
var arr = [1, 2, 3, 4, 5];
// function sum(arr) {
// var sum;
// sum=arr.reduce(function (p1, p2) {
// return p1+p2;
// })
// }
// 这个例子中,我们在函数lazy_sum中又定义了函数sum,并且,内部函数sum可以引用外部函数lazy_sum的参数和局部变量,
// 当lazy_sum返回函数sum时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”的程序结构拥有极大的威力。
// 注意到返回的函数在其定义内部引用了局部变量arr,所以,当一个函数返回了一个函数后,其内部的局部变量还被新函数引用,所以,闭包用起来简单,实现起来可不容易。
// 另一个需要注意的问题是,返回的函数并没有立刻执行,而是直到调用了f()才执行。
function lazy_sum(ar) {
var sum = function () {
return ar.reduce(function (p1, p2) {
return p1 + p2;
})
}
return sum;
}
// 当我们调用lazy_sum()时,返回的并不是求和结果,而是求和函数
var f = lazy_sum(arr); //f=sum 因为return sum
console.log("+++++++++", f);
// 调用函数f时,才真正计算求和的结果:
f();
console.log("+++++++++++++", f())
</script>
箭头函数
箭头函数和匿名函数有个明显的区别:箭头函数内部的this
是词法作用域,由上下文确
var arr=[1,2,3];
arr.map((t)=> {
console.log("++++++++",t)
});