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

函数优先的编程语言

作者: _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()();

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

相关文章

  • 函数优先的编程语言

    当一种编程语言被称为函数优先(First-class functions)的编程语言时,是指该语言中函数可以和其他...

  • JavaScrpit基础语法和数据类型

    JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言。虽然它是作为开...

  • 第六章 函数

    为什么需要函数 函数(有些编程语言中叫做方法)几乎是每个编程语言最重要的内容,无论是函数式编程还是面向对象编程。每...

  • 函数式编程思维在三行代码情书中的应用

    函数式编程概述 如今主流的编程语言,函数式编程范式或多或少都融入其中成了“标配”,或者说主流语言都在进行函数式方面...

  • 函数式编程思维在三行代码情书中的应用

    函数式编程概述 如今主流的编程语言,函数式编程范式或多或少都融入其中成了“标配”,或者说主流语言都在进行函数式方面...

  • 为什么要函数式编程?

    用函数编程 != 函数式编程 几乎所有编程语言中我们都会用到函数,但大部分情况都不是函数编程。函数编程的重要特点之...

  • 学习SQL【7】-函数

    不仅SQL, 对所有的编程语言来说,函数都起着至关重要的作用。函数就像是编程语言的“道具箱”,每种编程语言都准备了...

  • 【Scala】Scala函数式编程初探

    函数式编程 函数式编程是种编程典范,它将电脑运算视为函数的计算。函数编程语言最重要的基础是 λ 演算(lambda...

  • Python函数式编程

    虽然 Python 不是函数式编程语言(是命令式编程语言),但是支持许多有价值的函数式编程工具。Python 提供...

  • 函数式编程速记

    函数式编程 函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,...

网友评论

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

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