数组filter等和arguments结合闭包实现函数复用

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width;initial-scale=1.0;user-scalable=no">
<title>数组filter等和arguments结合闭包实现函数复用</title>
</head>
<body>
<script>

var numArr = [1,2,3,4,5,6];

//下面是自定义多种过滤函数,除了可以用于filter,还可以用于map, forEach, sort等
//通常使用filter函数,我们都是直接使用 array.filter(function(item,index,array){

//do something

//})

//这样不利于函数对象复用,下面会结合arguments来实现对filter函数的复用

function morethan(){

//获取用户传入的第一个参数值,作为比较基数
var num = arguments[0];

//下面这个myfn函数,是filter真正作用的函数
var myfn = function(){

var item = arguments[0];

//由于内部函数可以访问父作用域内的变量,所以num的值可以获得
return (item>num)
}

//下面是返回函数对象的引用(其实指针更合适),这里可以说是实现了闭包
//但是我认为不如理解成当这个外部函数执行完毕,由于对内部函数产生的
//引用指针还在最外部的环境里起作用没被回收,所以导致内部函数对象能够持续访问
return myfn;
}
//下面这个等价于 numArr.filter(function(item,index,array,num){})
var filterArr = numArr.filter(morethan(4));

alert(filterArr);
</script>

</body>
</html>

时间: 2024-11-05 14:56:24

数组filter等和arguments结合闭包实现函数复用的相关文章

数组filter()参数详解,巧用filter()数组去重

数组方法挺多,但是用来用去可能也就foreach,splice以及slice接触较多,filter()说实话之前也没过多了解.其实filter()为数组提供过滤功能,它会遍历数组所有元素,并且返回满足条件的元素,如下: 第一位形参 var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; var arr2 = arr.filter(function(x) { return x >= 8; }); console.log(arr2); //[8, 9, 10] 上述代码

一道javascript面试题(闭包与函数柯里化)

要求写一个函数add(),分别实现能如下效果: (1)console.log(add(1)(2)(3)(4)());//10 (2)console.log(add(1,2)(3,4)());//10 (3)console.log(add(1,2)(3,4));//10 针对(1)和(2),有两种思路实现:纯闭包思路和函数柯里化思路.一.闭包思路 (1)的解决方案(闭包实现) function add(arg) { // body... let sum = 0; sum+=arg; return

php闭包实现函数的自调用,也是递归

php的闭包可能不常用,但是在某些场合之下还是可以考虑用php的闭包来实现某些功能的,比如递归,这里讲一下用php的闭包实现递归 //php闭包实现函数的自调用,也就是实现递归 function closure($n,$counter,$max){ //匿名函数,这里函数的参数加&符号是,引址调用参数自己 $fn = function (&$n,&$counter,&$max=1) use(&$fn){//use参数传递的是函数闭包函数自身 $n++; if($n

PHP闭包--匿名函数

匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数.最经常用作回调函数(callback)参数的值.当然,也有其它应用的情况. Example #1 匿名函数示例 <?phpecho preg_replace_callback('~-([a-z])~', function ($match) {    return strtoupper($match[1]);}, 'hello-world');// 输出 helloWorld

swift基础学习(04)[闭包、函数、枚举、类和结构体]

//闭包表达式:闭包表达式是一种利用简洁语法构建内联闭包的方式 //sort方法:排序功能,排序后的原来的不会被修改 //:从大到小排序 let names = ["d","ds","wa","ad"] func sortNames(sName1:String,sName2:String) -> Bool { return sName1 > sName2 } var result = names.sort(sort

js 闭包让函数只执行一次

js 闭包让函数只执行一次 <script>function once(f) {    var run;    return function() {        if (!run) {            run = true;            f.apply(this, arguments);        }    }}var g = once(function(x) {    alert(x)});g(1);g(2);g(3); </script> js 闭包让函

Swift入门篇-闭包和函数

今天主要是给大家分享的是 swift中闭包的用法,我个人觉得闭包就是函数的简写方法,如果您函数不是很熟悉请查阅 swift入门篇-函数 1:函数类型 函数类型 var 变量 :(类型)->返回值 =函数名 说明: 1:函数名 表示函数地址 2:(类型)->返回值 表示函数类型 3:函数类型必须和函数名的参数和返回值一致 例子 /* 1:func 是函数关键字 2:Say是函数名,表示函数的地址 3:Say函数 参数是整形 返回值为布尔类型 */ func Say(num:Int)->Bo

5.初识python装饰器 高阶函数+闭包+函数嵌套=装饰器

一.什么是装饰器? 实际上装饰器就是个函数,这个函数可以为其他函数提供附加的功能. 装饰器在给其他函数添加功能时,不会修改原函数的源代码,不会修改原函数的调用方式. 高阶函数+函数嵌套+闭包 = 装饰器 1.1什么是高阶函数? 1.1.1函数接收的参数,包涵一个函数名. 1.1.2 函数的返回值是一个函数名. 其实这两个条件都很好满足,下面就是一个高阶函数的例子. def test1(): print "hamasaki ayumi" def test2(func): return t

Bloom filter的实现以及常用的hash函数

bloom filter利用时间换空间的思想,利用多个哈希函数,将一个元素的存在状态映射到多个bit中,特别是在网络环境中,BF具有广泛的用途,关键问题就是要减少false positive rate(可以设置参数来调节),扩展有 counting BF.这里选用的hash函数是表现较好的 BKDRHash , SDBMHash, DJBHash . Bloom-filter代码: bloom_filter.h #ifndef __BLOOM_FILTER_H__ #define __BLOOM