可以在 Javascript 的 运行 时间创建函数吗?

Can Functions Be Created at Run-time in Javascript?

维基百科关于第一 class 公民的文章指出,"some authors" 相信函数只是第一 class 语言中的公民,如果语言 supports their creation at run-time. This article 由 James Coglan 编写明确地先调用函数-class 公民 - 他是否知道关于 first-class 的标准的争议,我不知道。

这是我的问题:

  1. 使用 "creation at run-time" 的附加标准,JavaScript 程序是否优先 - class 公民?

值得一提的是,根据更普遍的标准(适用于其他大型对象),JavaScript 函数显然是第一个 class 公民,即他们可以作为变量传递;因此,我觉得上面提到的标准为对话增加了一种有趣的动态 - 或者至少是一种澄清的动态 - 正如一位用户所写 - "arbitrary".

  1. 如果是这样,在 运行 时创建一个函数在 JavaScript 中是什么样的(这就是我们所说的承诺、回调、匿名等)?
  2. 如果不是,函数的创建在 运行 时用另一种语言看起来像什么?

下面是一个在运行时创建函数的函数示例 JavaScript:

function makeIncrementer(value) {
    return function(x) {
        return x+value;
    }
}

它接受一个值,returns 一个将该值添加到其输入的函数。

以下是一些调用方法的示例:

var f = makeIncrementer(5);
f(2); // 7
f.call(null, 3); // 8
f.apply(null, [4]); /// 9
var object = {};
object.increment = f;
object.increment(5); // 10

可以使用 Function constructor

动态创建函数
var adder = new Function('a', 'b', 'return a + b');

adder(3, 4); // returns 7

更详细地说,这可用于应用任意二元运算符:

function make_binary_fun(operator) {
    return new Function('a', 'b', 'return a ' + operator ' b');
}
var adder = make_binary_fun('+');
var multiplier = make_binary_fun('*');