精华内容
下载资源
问答
  • php的匿名函数和闭包函数

    万次阅读 2018-04-11 16:17:00
    引言:匿名函数和闭包函数都不是特别高深的知识,但是很多刚入门的朋友却总是很困惑,因为大家习惯上写了函数就是用来调用的,匿名函数和闭包函数做什么用的? 匿名函数 php官方解释如下: 匿名函数...

    php的匿名函数和闭包函数

    tags: 匿名函数 闭包函数 php闭包函数 php匿名函数 function use


    引言:匿名函数和闭包函数都不是特别高深的知识,但是很多刚入门的朋友却总是很困惑,因为大家习惯上写了函数就是用来调用的,匿名函数和闭包函数做什么用的?

    匿名函数

    php官方解释如下:
    匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。

    这里说的很简单,可以用做回调函数,下面例子就是作为回调函数

    <?php
    echo preg_replace_callback('~-([a-z])~', function ($match) {
        return strtoupper($match[1]);
    }, 'hello-world');
    // 输出 helloWorld
    ?>
    

    上述例子中,preg_replace_callback 函数需要三个参数,第一个参数是一个正则表达式用来匹配数据,第二个参数是一个函数,第三个参数是需要匹配的字符串,也可以像下面这样写

    <?php
    $testFunc = function ($match) {
            return strtoupper($match[1]);
        };
    
    echo preg_replace_callback('~-([a-z])~', $testFunc, 'hello-world');
    // 输出 helloWorld
    ?>
    

    但是我们看到这个方法显然我们只需要用一次,所以没有必要再给他去命名,也没有多大的必要再去把他赋值给一个变量(赋值给变量的过程:PHP 会自动把此种表达式转换成内置类 Closure 的对象实例赋值给变量)

    闭包函数

    php中匿名函数也叫闭包函数,所以没什么区别。但是一般意义上的闭包的概念不是这样的,我们先说一下传统意义上的闭包,并提供一篇文章中js中的闭包用来和php中的闭包(匿名函数)进行对比。
    学习Javascript闭包(Closure)—阮一峰

    php中其实没有传统意义上的闭包函数,因为php中的函数不能调用夫作用域中的变量。如下

    <?php
    	function a(){
    		$a = 11;
    		function b(){
    			$b = 22;
    			echo $a;
    			echo $b;
    		}
    		b();
    	}
    	a();
    //报Notice:Undefined variable: a in index.php on line 6
    //22
    ?>
    

    而看上面文章中得知,js中是可以的。所以php中匿名函数也叫闭包函数,也可以传递父作用域的变量进闭包函数(达到了类似js获取父作用域变量的效果),php中使用的是use关键字,具体如下

    <?php
    $count = 0;
    
    $a = function()
    { var_dump($count); };
    
    $b = function() use ($count)
    { var_dump($count); };
    
    $count++;
    
    $c = function() use (&$count)
    { var_dump($count); };
    
    $count++;
    
    $a();    // null   Notice: Undefined variable: count in
    $b();    // int 0
    $c();    // int 2
    $count++;
    $b();    // int 0
    
    ?>
    

    上述例子的输出和你认为的是不是不同呢。

    解析:闭包函数(匿名函数)使用use获取函数定义时的副作用域变量,不管在何时调用。如果要获取调用时的变量值,需要用引用传递。具体怎么使用就要看什么使用场景了。

    ##列举了几种常用的场景

    1. 作为回调函数
    //一个我们使用过的例子
    <?php
        /*
         * 菜谱拆分食物后的拼接
         * 参数均不能为空
         * */
        public function mergeFoodsStr($str,array $mapping){
    //        $str = '白菜半棵、__2__鲍菇两只、__0__一根,__1__两根,三者比例为100:100:15,酱油5克,香油2克,盐1克。';
    //        $mapping = array(
    //            0 =>array('name' => '胡萝卜','id' =>  '81' ),
    //            1 =>array ( 'name' => '萝卜', 'id' =>  '72'),
    //            2 =>array ( 'name' =>  '杏', 'id' => '1841')
    //        );
            if(empty($str) || empty($mapping)){
                return false;
            }
            $strNew = preg_replace_callback('"|__(\d)__|" ',function ($matches) use ($mapping){
                return $mapping[$matches[1]]['name'];
            },$str);
            $this->log('拼接后的食材字符串',$strNew);
            return $strNew;
        }
    ?>
       
    

    2.如果是一次性使用的函数,不能被重用,可以使用闭包函数
    3. 使用array_work()函数配合匿名函数来减少foreach层数
    4. 等等

    展开全文
  • javascript匿名函数

    千次阅读 2015-01-13 19:02:52
    此前在做node.js项目的时候,整天与匿名函数打交道。

    此前在做node.js项目的时候,整天与匿名函数打交道,似乎习惯成自然,熟悉得很了。

    这次天降大任,搞了许久前端,忽然有一次觉得应该写个匿名函数,竟然不知道该怎么写!

    主要是搞不清楚匿名函数应该写在哪里。

    函数有定义,有调用。而匿名函数是作为参数定义在一个函数里面的。

    那么它是定义在函数定义里,还是定义在函数调用里?

    定义在函数调用里。

    我第一次是写在函数定义里,如

    function A(id,function(){}){

    }

    结果语法就通不过。

    后来想清楚了,匿名函数的意义在于,让你区分不同情况来做处理:

    function HelloWorld(getWho){
        alert(getWho() + ": Hello World!");
    }
    HelloWorld(function(){
        return "zhang3";
    });
    HelloWorld(function(){
        return "Li4";
    });
    //匿名函数,在调用的时候才定义。。。

    .NET里也是一样。javascript里的匿名函数跟委托、lambda表达式有所关联:

    delegate string DlgGetOneShowItem(DataMgrService.ViewGroupItem vgi);
    DlgGetOneShowItem dlgGetOneCutomViewItem = (DataMgrService.ViewGroupItem vgi) =>
    {
    	//……
    };
    DlgGetOneShowItem dlgGetOneOjbectItem = (DataMgrService.ViewGroupItem vgi) =>
    {
    	//……
    };

    将函数赋给委托,一步到位,省却了定义函数,然后再赋给委托的麻烦。

    http://jsfiddle.net/ 是个好网站,在这里可以很方便地检测js、html、css。

    展开全文
  • 1.匿名的目的就是要没有名字,给匿名函数赋给一个名字是没有意义的。 2.匿名函数的参数规则、作用域关系与有名函数是一样的。 3.匿名函数的函数体通常应该是 一个表达式,该表达式必须要有一个返回值。 f=lambda x,n:...
  • 匿名函数与自执行函数

    千次阅读 2020-03-13 11:54:16
    匿名函数就是指的没有名字的函数,即定义函数对象时不定义函数体名字,但是必须将匿名函数作为表达式赋予一定操作,比如将其作为变量值或者让其自执行,否则这次定义将无意义,解释器也会抛出异常。 匿名函数 /** *...

    匿名函数与自执行函数

    匿名函数就是指的没有名字的函数,即定义函数对象时不定义函数体名字,但是必须将匿名函数作为表达式赋予一定操作,比如将其作为变量值或者让其自执行,否则这次定义将无意义,解释器也会抛出异常。

    匿名函数

    /**
     * 定义函数 声明式
     * 声明式会导致函数提升,function会被解释器优先编译。即我们用声明式写函数,可以在任何区域声明,不会影响我们调用
     */
     function s(){
         console.log(1);
     }
    
    /**
     * 定义匿名函数 函数表达式
     * 函数表达式中的function则不会出现函数提升(但是赋予的变量会提升)。经由JS解释器逐行解释,到了这一句才会赋值函数表达式。因此如果调用在函数表达式之前,则会调用失败。
     */
     var s = function(){
         console.log(1);
     }
    
    // https://github.com/WindrunnerMax/EveryDay/blob/master/JavaScript/JS%E5%8F%98%E9%87%8F%E6%8F%90%E5%8D%87.md
    

    对于上述定义方式调用s()并无区别,但是定义函数会存在函数体的提升,而定义匿名函数时只会将定义变量提升,赋值部分不会提升。

    自执行函数

    自执行即函数定义与创建合用为一体,创建完成即调用

    (function() { 
        console.log(1); 
    })(); // 1
    

    包围函数的第一段括号返回一个匿名函数,随后第二个括号将其调用。这种方式可以缩小作用域,ES6之前JS仅有全局作用域与函数作用域,显然将所有变量交予全局作用域是不合适的,而定义函数再调用再销毁函数操作了三步,使用自执行匿名函数可以将上述三步操作定义后即完成。

    /**
     * 自执行的一些方式 
     * 只要能够将匿名函数作为一个表达式出现,在后边加入()就能够将其自执行
     */
     
    // 这种经常用来构建沙箱模式
    (function () { 
        console.log(1);
     }());
     
    // 常用方式 传参操作
    (function (i) { 
        console.log(i);
     })(1);
      
    // 由于括弧()和JS的&&、异或、逗号等操作符在函数表达式和函数声明上是没有歧义的  
    // 所以一旦解析器知道其中一个已经是表达式了,其它的也都默认为表达式了  
    var i = function () { 
       console.log(1);
    }();
    
    true && function () { 
        console.log(1); 
    }();
    
    false || function () { 
        console.log(1); 
    }();
    
    0, function () { 
        console.log(1); 
    }();  
      
    // 如果你不在意返回值,或者不怕难以阅读
    // 你甚至可以在function前面加一元操作符号  
    !function () { 
        console.log(1); 
    }();  
    
    ~function () { 
        console.log(1); 
    }();  
    
    -function () { 
        console.log(1);
    }();  
    
    +function () { 
        console.log(1); 
    }();  
      
    // 使用new关键字
    new function () { 
        console.log(1);
    }  
    new function (i) { 
        console.log(i);
    }(1);
    

    每日一题

    https://github.com/WindrunnerMax/EveryDay
    
    展开全文
  • python 匿名函数

    2018-03-01 23:12:00
    匿名函数 一 什么是匿名函数? 匿名就是没有名字 def func(x,y,z=1): return x+y+z 匿名 lambda x,y,z=1:x+y+z #与函数有相同的作用域,但是匿名意味着引用计数为0,使用一次就释放,除非让其有名字 ...

    匿名函数

    一 什么是匿名函数?

    匿名就是没有名字
    def func(x,y,z=1):
        return x+y+z
    
    匿名
    lambda x,y,z=1:x+y+z #与函数有相同的作用域,但是匿名意味着引用计数为0,使用一次就释放,除非让其有名字
    func=lambda x,y,z=1:x+y+z 
    func(1,2,3)
    #让其有名字就没有意义

    二 有名字的函数与匿名函数的对比

    #有名函数与匿名函数的对比
    有名函数:循环使用,保存了名字,通过名字就可以重复引用函数功能
    
    匿名函数:一次性使用,随时随时定义
    
    应用:max,min,sorted,map,reduce,filter

    转载于:https://www.cnblogs.com/morgana/p/8491024.html

    展开全文
  • 匿名函数:所谓匿名函数,就是没有名字的函数 定义匿名函数 func(x,y int) int { return x + y } 匿名函数作为返回值 func getPrintMessage() func(string) { // returns an anonymous function return ...
  • js匿名函数

    2013-12-16 09:59:45
    一、什么是匿名函数? 在Javascript定义一个函数一般有如下三种方式: 函数关键字(function)语句:  function fnMethodName(x){alert(x);}函数字面量(Function Literals):  var fnMethodName = function(x)...
  • GO-函数2-匿名函数

    2018-09-07 14:43:40
    匿名函数概述 匿名函数的主要作用是封装一段一次性执行的代码 它无所谓复用,所以无需起名,之所以进行封装的意义,在于使一段代码成为一个整体 defer延时执行一段代码,和go并发执行一段代码是匿名函数的常用...
  • JavaScript匿名函数理解及应用

    千次阅读 2020-05-08 19:50:11
    匿名函数 匿名函数顾名思义就是没有名字的函数,在实际开发中经常会用到,也是JavaScript的重点。匿名函数又叫立即执行函数。 由于这种函数是匿名的,所以它不能被调用。 由于它不能被调用,所以如果它不立即执行的...
  • 匿名函数意义是什么?匿名函数怎么样用?(疑问三连,what,why,how) 一,什么是匿名函数? python中没有名字的函数,称为匿名函数。语法格式:lambda x : x**2 既 lambda+形参:代码块 二,匿名函数意义是...
  • 什么是匿名函数:没有实际名字的函数 匿名函数的作用: 1、通过匿名函数可以实现闭包(必须掌握的知识点) 2、模拟块级作用域,减少全局变量。执行完匿名函数,存储在内存中相对应的变量会被销毁,使用块级作用域...
  • 前文提到了匿名函数的基本用法,你可以看出 匿名函数的作用普通函数完全能够解决,并且相对于匿名函数他更容易阅读和维护,那么你会产生疑问:那匿名函数存在的意义是什么? //写一个匿名函数作为回调 $arr = [1,...
  • //普通函数、函数表达式、匿名函数、自执行函数 //1.普通函数的声明与调用 function fun1(x,y){ console.log(x + "+" + y + "=" +(x+y)); } fun1(10,20); //2.函数表达式 是由声明一个...
  • Go语言匿名函数困惑

    2018-01-02 08:18:26
    真正的使用方法,要深刻体会匿名函数的缘由,它只是为了少数的几次调用,又不想命名太多造成命名冲突,就使用一边构造函数一边使用的情况,不能单独脱离调用来构造。 1-声明一个匿名函数func(参数列表) 返回值列表 ...
  • 1.匿名函数在C++中比较重要,使用的意义归结起来是节省空间 使用方法为 auto 函数名 =[需要引入的外部变量](形参)->函数返回类型{函数体} 或者 [需要引入的外部变量](形参)->函数返回类型{函数体} 可以省略...
  • 匿名函数的优点和应用

    千次阅读 2018-08-08 15:59:16
    匿名函数:就是定义时未直接指定名称的函数 因为非匿名函数在定义时,就已经创建函数对象和作用域对象;所以,即使未调用,也占用内存空间; 匿名函数,仅在调用时,才临时创建函数对象和作用域链对象;调用完,...
  • JavaScript中匿名函数的多种写法

    千次阅读 2014-09-15 01:00:27
    你必须知道的JavaScript匿名函数以及多种匿名函数的写法,本文还将详解为什么匿名函数会自动执行,这也是Jquery 库的原理哦~~~
  • js lambda函数 (匿名函数) lambda表达式

    千次阅读 2020-10-23 10:42:07
    js匿名函数也被叫做lambda函数,匿名函数顾名思义就是没有名字(隐藏名字)的函数,这就得联系到定义函数的知识了,定义函数的方式一般被分为两种:函数声明和函数表达式,而函数表达式在使用的时候绝大多数情况下...
  • JS中的匿名函数

    千次阅读 2020-02-25 09:19:21
    匿名函数又叫立即执行函数。因为它是匿名,所以是不可以被调用的,也正因为如此,如果它不能被立即执行,那么它也就失去了存在的意义!所以,它可以被立即执行,并且执行后立马被销毁。     &...
  • 1.匿名函数和构造函数的理解 1.匿名函数(没有实际名字的函数) –1--首先我们声明一个函数 function test(){ console.log("a"); } test(); –2--将函数名去掉就是匿名函数 function (){ console.log("a"); } test...
  • js中匿名函数的N种写法

    千次阅读 2018-10-12 22:40:04
    在java中有private属性,强大的功能js不能实现就矮人一截,匿名函数,发扬广大。匿名函数没有实际名字,也没有指针,怎么执行滴? 其实大家可以看看小括号的意义就应该可以理解。小括号有返回值,也就是小括号内的...
  • 我们知道假如调用这个函数 ds(5) = 11 现在我们使用 lambda x : 2 * x + 1 冒号前面代表参数 这样我们只需要 g = lambda x : 2 * x + 1 g(5) 就可实现和第一个函数一样的调用 再举个有两个参数的例子 原函数 def add...
  • JavaScript匿名函数写法

    2018-02-22 15:56:46
    匿名函数没有实际名字,也没有指针,怎么执行滴? 其实大家可以看看小括号的意义就应该可以理解。小括号有返回值,也就是小括号内的函数或者表达式的返回值,所以说小括号内的function返回值等于小括号的返回值,不...
  • 1.匿名函数和闭包的概念 匿名函数: 声明函数时不显式声明函数名。 闭包: 简单来说就是一个函数定义中引用了函数外定义的变量,并且该函数可以在其定义环境外被执行。这样的一个函数我们称之为闭包。实际上闭包可以...
  • C++的匿名函数(lambda表达式)

    千次阅读 多人点赞 2020-09-23 22:40:15
    C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式). 它是定义和使用匿名函数对象的一种简便的方式。匿名函数是我们需要用到的一个函数,但是又不想去费力命名一个函数的场景。我们无需为每个值或者每种...
  • javaScript中的匿名函数

    2017-09-14 10:25:51
    匿名函数没有实际名字,也没有指针,怎么执行滴? 其实大家可以看看小括号的意义就应该可以理解。小括号有返回值,也就是小括号内的函数或者表达式的返回值,所以说小括号内的function返回值等于小括号的返回值,...
  • Python——匿名函数lambda

    千次阅读 2021-07-12 13:05:12
    有时候我们想使用一个函数...用匿名函数lambda就可以实现上述目的,举例如下: 1、一个参数 def形式 In [1]: def odd(x): ...: return x%2 ...: for i in range(10): ...: print(odd(i)) ...: 0 1 0 1 0 1 0 1 0 1
  • js 匿名函数参数设置

    2017-04-11 11:23:05
    其实大家可以看看小括号的意义就应该可以理解。小括号有返回值,也就是小括号内的函数或者表达式...关于匿名函数写法,很发散~ 最常见的用法: (function() { alert('water'); })(); js匿名函数使用参数化
  • js 闭包和匿名函数

    千次阅读 2012-11-21 17:00:03
    前面学了这么多知识,今天就来看看匿名函数和闭包吧! 想要学习闭包先来看看什么是匿名函数吧! (一)匿名函数 匿名函数就是没有名字的函数。他有两种声明方式: 1.典型的函数声明: function functionName(arg0...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,289
精华内容 21,315
关键字:

匿名函数的意义