JavaScript函数计算器

时间:2015-01-08 13:05:42

标签: javascript function math

我到目前为止:

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'作为一个字符串..?

4 个答案:

答案 0 :(得分:4)

您已经纠正了语法过多的问题,但对于ES5以及之前的问题,这就是它的原因。

但是,在ES6中,您可以使用新的"arrow function" lambda语法:

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

请参阅http://www.es6fiddle.net/i4o5uj2l/

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

function func(f, ...args) {
  console.log(f.apply(this, args));
}

func((x, y) => x * y, 3, 7);
> 21

答案 1 :(得分:1)

我可以使用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正确评估

答案 2 :(得分:0)

使用字符串的唯一方法是使用臭名昭着的evalhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval

var x = 2;

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

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

答案 3 :(得分:0)

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

function multiply(x) {
    return function() {
      return x*x;
    }
}

var bytwo = multiply(2);

bytwo(); // 4