美文网首页
函数优先的编程语言

函数优先的编程语言

作者: _fan凡 | 来源:发表于2019-04-30 12:28 被阅读0次

    当一种编程语言被称为函数优先(First-class functions)的编程语言时,是指该语言中函数可以和其他任何变量一样对待。例如,一个函数可以作为参数传递给另一个函数,可以作为返回值被另一个函数返回,可以作为一个值分配给一个变量。
    如下例子使用JavaScript语言演示

    分配一个函数给一个变量

    const  foo = function() {
      console.log("foobar");
    }
    // Invoke this function using the variable: foo
    foo();
    
    • 首先定义一个匿名函数,并把它赋值给一个变量:foo
    • 在变量后边添加小括号()parentheses来通过变量调用该方法
      即使方法被命名,仍然可以使用变量名调用,但是不能使用方法名直接调用。使用变量命名后在debug代码的时候是有帮助的,对调用方式没有影响。
      如下:
    const foo2 = function foo1() {
      console.log("foobar1");
    }
    //right to invoke
    foo2();
    //error to invoke
    foo1();
    

    将方法作为参数进行传递

    function sayHello() {
      return "hello,";
    }
    function sayHi = function() {
      return "hi,";
    }
    function greeting(helloMessage, name) {
      console.log(helloMessage() + name;
    }
    
    //Pass `sayHello` as an argument to `greeting` function
    greeting(sayHello, "JavaScript!");
    //Pass `sayHi` as an argument to `greeting` function
    greeting(sayHi, "codepen");
    
    • 通过直接命名或者匿名定义了两个函数
    • 直接将sayHello()方法和sayHi作为参数传递给方法greeting(),这里就解释可以把方法当做一个值来对待。
      把一个方法A作为参数传递给另一个方法B,那么方法A我们成为回调函数Callback function,在这里sayHello就是回调函数

    返回一个方法(将方法作为返回值)

    function sayHello() {
      return function() {
        console.log("hello!");
      }
    }
    
    //we have two ways to invoke
    //1.using a variable
    const myFunc = sayHello();
    myFunc();
    
    //2.using double parentheses
    sayHello()();
    

    在这个例子中,我们在方法sayHello中返回了另外一个方法:之所以能这么做,是因为在JavaScript中方法(function)也被当做一个值(value)。
    一个方法A返回一个方法B,那么方法A叫做高阶函数 Higher-Order Function
    在例子中,我们有两种方式来调用sayHello方法以及其返回的匿名函数(Anonymous Function),如下图:

    • 1.使用变量
    const myFunc = sayHello();
    

    那么此时myFunc其实就是一个匿名函数了,要调用这个匿名函数,那么就在变量名后边加上小括号就好了。

    myFunc();
    

    也就是这里要调用sayHello方法返回的匿名函数,需要定义一个变量。因为直接调用sayHello函数返回的就是这个匿名函数,但是这个匿名函数并没有调用。

    • 2.使用两个括号
    sayHello()();
    

    可以如上使用两个括号()()来调用返回的方法。

    相关文章

      网友评论

          本文标题:函数优先的编程语言

          本文链接:https://www.haomeiwen.com/subject/pmkmnqtx.html