可以在 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 的标准的争议,我不知道。
这是我的问题:
- 使用 "creation at run-time" 的附加标准,JavaScript 程序是否优先 - class 公民?
值得一提的是,根据更普遍的标准(适用于其他大型对象),JavaScript 函数显然是第一个 class 公民,即他们可以作为变量传递;因此,我觉得上面提到的标准为对话增加了一种有趣的动态 - 或者至少是一种澄清的动态 - 正如一位用户所写 - "arbitrary".
- 如果是这样,在 运行 时创建一个函数在 JavaScript 中是什么样的(这就是我们所说的承诺、回调、匿名等)?
- 如果不是,函数的创建在 运行 时用另一种语言看起来像什么?
下面是一个在运行时创建函数的函数示例 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('*');
维基百科关于第一 class 公民的文章指出,"some authors" 相信函数只是第一 class 语言中的公民,如果语言 supports their creation at run-time. This article 由 James Coglan 编写明确地先调用函数-class 公民 - 他是否知道关于 first-class 的标准的争议,我不知道。
这是我的问题:
- 使用 "creation at run-time" 的附加标准,JavaScript 程序是否优先 - class 公民?
值得一提的是,根据更普遍的标准(适用于其他大型对象),JavaScript 函数显然是第一个 class 公民,即他们可以作为变量传递;因此,我觉得上面提到的标准为对话增加了一种有趣的动态 - 或者至少是一种澄清的动态 - 正如一位用户所写 - "arbitrary".
- 如果是这样,在 运行 时创建一个函数在 JavaScript 中是什么样的(这就是我们所说的承诺、回调、匿名等)?
- 如果不是,函数的创建在 运行 时用另一种语言看起来像什么?
下面是一个在运行时创建函数的函数示例 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('*');