精华内容
下载资源
问答
  • 匿名函数

    万次阅读 2020-01-17 13:48:45
    匿名函数 匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。 匿名函数目前是通过Closure...

    匿名函数 

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

    匿名函数目前是通过 Closure 类来实现的。

    Example #1 匿名函数示例

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

    闭包函数也可以作为变量的值来使用。PHP 会自动把此种表达式转换成内置类 Closure 的对象实例。把一个 closure 对象赋值给一个变量的方式与普通变量赋值的语法是一样的,最后也要加上分号:

    Example #2 匿名函数变量赋值示例

    <?php
    $greet = function($name)
    {
        printf("Hello %s\r\n", $name);
    };

    $greet('World');
    $greet('PHP');
    ?>

    闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去。 PHP 7.1 起,不能传入此类变量: superglobals、 $this 或者和参数重名。

    Example #3 从父作用域继承变量

    <?php
    $message = 'hello';

    // 没有 "use"
    $example = function () {
        var_dump($message);
    };
    echo $example();//null

    // 继承 $message
    $example = function () use ($message) {
        var_dump($message);
    };
    echo $example();//hello

    //更改自定义变量时
    $message = 'world';
    echo $example();//hello

    // 重置message
    $message = 'hello';

    //变量前面用&引用
    $example = function () use (&$message) {
        var_dump($message);
    };
    echo $example();//hello

    // 父作用域中更改的值
    // 反映在函数调用中
    $message = 'world';
    echo $example();//world 引用生效

    // 闭包还可以接受常规参数
    $example = function ($arg) use ($message) {
        var_dump($arg . ' ' . $message);
    };
    $example("hello");
    ?>

    以上例程的输出类似于:

    Notice: Undefined variable: message in /example.php on line 6
    NULL
    string(5) "hello"
    string(5) "hello"
    string(5) "hello"
    string(5) "world"
    string(11) "hello world"
    展开全文
  • 匿名函数

    2009-06-19 15:42:00
    没有名字的就叫作“匿名函数”,你可以认为他们是一次性函数。当你只需要用一次某个函数式,他们就特别有用。通过使用匿名函数,没有必要把函数一直放在内存中,所以使用匿名函数更加有效率。像这个function(x,y){...

    没有名字的就叫作“匿名函数”,你可以认为他们是一次性函数。当你只需要用一次某个函数式,他们就特别有用。通过使用匿名函数,没有必要把函数一直放在内存中,所以使用匿名函数更加有效率。像这个

    function(x,y){return x+y}

    没有名字当然不能直接调用,也无从直接调用;最多能只能把它赋值或闭包处理(闭包是什么下面再讲),如:

    var sum =function(x,y){return x+y};

    alert(sum(1,2));

    这时候,与传统写法是等价的 function sum(x,y){return x+y}.这样的写法让人感觉更OOP,因为sum变量就包含了function...这个函数体;

    还可以闭包的方式调用该函数:

    (functioin(x,y){return x+y})(1,2) //返回值3

    代码很简洁。注意括号的使用,形式为(exp)()。这种用法可以称作 闭包closure。
    后面括号的是参数,把这些参数放进fn里面立即计算,得出一个值 3。这实际上是一个表达式的运算。没想到fn函数体也可以放进去参与运算^_^(Using function as an expression)!(基本功:表达式Expression,其含义是通过计算后,始终会返回一个值,无论这个表达式有多长)

    fn还可以以参数形式传递(passing function as argument to other functions)

    var main_fn = function(fn,x,y){return fn(x,y)}

    var sum = function (x,y){
       return x+y;
    }

    alert(main_fn(sum,1,2)) // result:3

     

    js匿名函数的执行

    Javascript代码 复制代码
    1. (function(){}());  
    (function(){}());
    

    去掉最外层括号,浏览器将会报错,加上就没事,该怎么解释?
    Javascript代码 复制代码
    1. (function(){})();  
    (function(){})();
    

    定义一个匿名函数并立即执行。
    呵呵,一个富有想象力的写法
    Javascript代码 复制代码
    1. 1,function(){}();  

     

    展开全文
  • 匿名函数和非匿名函数的区别 定义时未指定名称的函数, 匿名函数仅调用时才 临时创建函数的对象和作用域对象,调用完,立即释放,所以匿名函数比非匿名函数更节省空间。 因为非匿名函数在定义时,就已经创建函数对象...

    匿名函数和非匿名函数的区别

    定义时未指定名称的函数,
    匿名函数仅调用时才 临时创建函数的对象和作用域对象,调用完,立即释放,所以匿名函数比非匿名函数更节省空间。
    因为非匿名函数在定义时,就已经创建函数对象和作用域对象;所以,即使未调用,也占用内存空间;

    展开全文
  • 一、C# 匿名函数简介 匿名方法:没有名字的方法,不需要名字的方法。 匿名方法是没有名称只有主体的方法。 匿名方法和委托搭载使用。 匿名方法 精确点可以改叫 匿名函数。 委托是用于引用与其具有相同标签的...

    一、C# 匿名函数简介

    匿名方法:没有名字的方法,不需要名字的方法。

    匿名方法是没有名称只有主体的方法。

    匿名方法和委托搭载使用。

    匿名方法 精确点可以改叫 匿名函数。

    委托是用于引用与其具有相同标签的方法。换句话说,您可以使用委托对象调用可由委托引用的方法。

    匿名方法(Anonymous methods) 提供了一种传递代码块作为委托参数的技术。

    在匿名方法中您不需要指定返回类型,它是从方法主体内的 return 语句推断的。

     

    二、 C# 匿名函数使用场景

    1. delegate 委托匿名方法

        //委托
        delegate int CalcuteSum(int num1,int num2);
    
            static void ObjectTest1()
            {
                //委托匿名方法1
                CalcuteSum calcuate1 = delegate (int num1, int num2)
                {
    
                    return num1 + num2;
                };
    
                int result = calcuate1(1, 2);
                Console.WriteLine(result);//3
    
                //委托匿名方法1
                calcuate1 = delegate (int num1, int num2)
                {
                    return num1 + num2 + 1;
                };
    
    
                int result2 = calcuate1(1, 2);
                Console.WriteLine(result2);//4
    
                //委托静态方法
                calcuate1 = TestSum;
                int result3 = TestSum(1, 2);
                Console.WriteLine(result3);//5
            }
    
            static int TestSum(int num1, int num2)
            {
                return num1 + 1 + num2 + 1;
            }

    2. 匿名方法 和  Lamda表达式

       从 C# 3 开始,lambda 表达式提供了一种更简洁和富有表现力的方式来创建匿名函数。 使用 => 运算符构造 lambda 表达式:

    Func<int, int, int> sum = (a, b) => a + b;
    Console.WriteLine(sum(3, 4));  // output: 7

     

    3.方便开发和使用的委托  Action,Func

    Action: 没有返回类型的委托定义。

    Action greet = delegate { Console.WriteLine("Hello!"); };
    greet();
    Action<int, int> getNum = delegate (int num1, int num2)
    {
        var result = num1 * num2;
    
        Console.WriteLine(result);
    };

    Func :需要返回类型的委托定义。

    Func<int, int, int> sum = static delegate (int a, int b) { return a + b; };
    Console.WriteLine(sum(10, 4));  // output: 14

     

     

    更多:

    C# 匿名对象_C#匿名类型_C# 匿名对象使用整理

    C# 数组_C#动态数组详解整理

    DotNet 开发项目类型整理_C#开发项目类型整理

     

    展开全文
  • 函数-匿名函数

    2019-09-06 00:01:10
    匿名函数 匿名函数定义 匿名函数的使用 匿名函数 匿名函数定义 //全局定义匿名函数 var ( result = func(a1 int,b1 int)int { resturn a1+b1 } ) //函数内部定义匿名函数 func test(a,b int) int { result ...
  • ![图片说明](https://img-ask.csdn.net/upload/201605/06/1462510551_153694.jpg) 求详细说明为什么其中test=3明白 然后匿名函数中的匿名函数怎么调用 如果还有fn(4) fn(5) 为什么传入的都是b的值
  • 匿名函数、自执行函数,自执行匿名函数和立即执行的函数表达式区别 今天在写代码的时候发现对自执行函数有点懵,便去查询资料。然后紧接着自执行匿名函数,立即执行函数,匿名函数一窝蜂的出来了,借此就好好谈谈这...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,454
精华内容 14,581
关键字:

匿名函数