# 术语

# 一等函数(first-class function)

一等函数是指在编程语言中,函数被视为一种值(或成为对象)的特性。具体来说,一等函数具备以下特点:

  1. 函数可以被存储在变量中:可以将函数赋值给变量,就像赋值其他类型的值一样;
  2. 函数可以作为参数传递:可以将函数作为参数传递给其他函数;
  3. 函数可以作为返回值返回:函数可以作为另一个函数的返回值。

一等函数的概念是函数式编程的重要特性之一。它使得函数可以像其他数据类型一样灵活地操作,可以作为数据的一部分进行传递和处理。这种特性使得函数可以用来构建更加灵活和可复用的代码结构。

在支持一等函数的编程语言中,可以使用函数来实现回调机制、高阶函数、函数组合等功能。 一些支持一等函数的编程语言包括JavaScript、Python、Ruby等。这些语言中的函数可以像其他数据类型一样自由地进行操作,使得编程变得更加灵活和强大。

# 基于原型(Prototype-based)

基于原型(Prototype-based)是一种面向对象编程(OOP)的范式,与基于类(Class-based)的OOP不同。

在基于原型的编程中,每个对象都有一个原型(Prototype),它定义了对象的基本特征和行为。对象可以通过访问其原型来继承属性和方法。如果一个对象访问某个属性或方法时找不到,它会继续在其原型上查找,直到找到该属性或方法或者达到原型链的末尾。

原型链是由对象的原型组成的链式结构,它允许对象通过继承和委托的方式共享和扩展行为。

虽然JavaScript是一门基于原型的语言,但在ES6中引入了class关键字,以提供一种类似于传统类的语法和语义。

JavaScript 中,class关键字提供了一种声明类的语法。类可以包含构造函数实例方法静态方法getter/setter等成员。通过使用class关键字,我们可以更直观地定义和组织代码,并且可以使用类的实例化继承封装等面向对象的概念。

尽管class关键字在语法上看起来像是定义类,但实际上它仍然是基于原型的。在JavaScript中,使用class定义的类本质上是通过构造函数原型来实现的。类的构造函数定义对象的初始状态和行为,而类的方法则被添加到构造函数的原型上,从而实现了方法的共享和继承。

使用class关键字的好处是它提供了一种更加清晰和直观的语法,使得面向对象编程更易于理解和使用。它也使得JavaScript与其他基于类的语言更加接近,使那些熟悉类和对象的开发者更容易上手JavaScript

基于原型和基于类是两种不同的面向对象编程范式。他们在对象创建、继承和组织代码方面有一些区别:

  1. 对象创建方式:
    • 基于原型:对象是通过克隆现有对象并在其基础上进行修改和扩展来创建。可以使用Object.create()方法创建一个指定原型的新对象,或者通过构造函数和new关键字来创建对象。
    • 基于类:对象是通过实例化类来创建。类是对象的模板,通过使用class关键字定义类,然后使用new关键字实例化类来创建对象。
  2. 继承方式:
    • 基于原型:对象通过原型链来继承属性和方法。每个对象有一个原型,如果对象访问某个属性或方法时找不到,它会在原型链上继续查找,直到找到该属性或方法或者到达原型链的末尾。
    • 基于类:继承是通过类之间的关系来实现。子类可以继承父类的属性和方法,并可以添加自己的属性和方法。通常使用关键字extends来指定父类,并使用super来调用父类的构造函数和方法。
  3. 代码组织方式:
    • 基于原型:基于原型的编程通常更加灵活,对象的行为可以动态地修改和扩展。对象之间的关系通过原型链来建立,可以在运行时动态地添加、修改和删除属性和方法。
    • 基于类:基于类的编程提供了一种更加结构化和静态的方式来组织代码。类定义了对象的结构和行为,并且在编译时就确定了对象的属性和方法。

# 立即调用函数表达式(IIFE-Immediately-Invoked Function Expression)

IIFE是一个在定义时就会立即执行的JavaScript函数。它是一种设计模式,也被称作自执行匿名函数,主要包含两部分:

  1. 一个具有词法作用域的匿名函数,并且用圆括号运算符闭合起来,不但阻止外界访问IIFE中的变量,且不会污染全局作用域;
  2. 一个立即执行函数表达式。
(function () {
  // ...
})()

(() => {
  // ...
})()

(async () => {
  // ...
})()
1
2
3
4
5
6
7
8
9
10
11
上次更新: 2024/4/16 11:23:24