JavaScript 函数计算器



到目前为止我有:

function func(f,x) {
alert(f(x));
}
func(function(x) {return x*x;},2);

这有效,但我认为传递function(x) {return x*x;},是多余的,我可以传递x*x,因为这个想法是我可以提供(几乎)任何功能。

我试过:

function func(f,y) {
g=function() {return f;};
alert(g(y));
}
func(x*x,2);

等等,但我无法让它工作。也许如果我将"x*x"作为字符串传递..?

你是对的,语法过多,但对于 ES5 及更早版本,就是这样。

但是,在 ES6 中,您可以使用新的"箭头函数"lambda 语法:

func(x => x * x, 2);

见 http://www.es6fiddle.net/i4o5uj2l/

FWIW,上面的func不是很好,因为它只支持一元函数,即那些采用单个参数的函数。 您可以扩展func以使用 ES6 "spread 参数":

function func(f, ...args) {
  console.log(f.apply(this, args));
}
func((x, y) => x * y, 3, 7);
> 21
好吧,

我有一种方法可以使用这里的eval来做到这一点 http://jsfiddle.net/q5ayoszy/

function func(f,y) {
g=function()
{ x=y;
    return eval(f);
};
alert(g(y));
}
func('x*x',2);

注意:我将表达式作为字符串传递,然后在函数中使用它。

您只需要将 y 的值分配给函数内部的变量x,以便eval正确计算

使用字符串执行此操作的唯一方法是使用臭名昭著的eval:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval

var x = 2;
var y = eval("x * x"); //y = 4

但是使用 eval 几乎总是一个非常糟糕的主意。

您可以使用 currying 将流程分解为更小的函数:

function multiply(x) {
    return function() {
      return x*x;
    }
}
var bytwo = multiply(2);
bytwo(); // 4

最新更新