如何在Javascript中将参数传递给基于eval的函数

时间:2018-03-06 07:00:22

标签: javascript parameter-passing eval

我将函数体存储在带有函数名的字符串中。

function fnRandom(lim){
    var data=[];
    for(var i=0;i<lim;i++)
    {
        data=data.concat(Math.floor((Math.random() * 100) + 1));
    }
return data;
}

从下拉列表中选择functionName后,我使用eval来执行函数体。

JSON.stringify(eval(this.selectedFunction.body));

我想将'lim'传递给此执行,还是可以使用functionName作为启动点以执行某种方式?

3 个答案:

答案 0 :(得分:3)

使用Function构造函数

&#13;
&#13;
var body = "console.log(arguments)"

var func = new Function( body );
func.call( null, 1, 2 ); //invoke the function using arguments
&#13;
&#13;
&#13;

带有命名参数的

&#13;
&#13;
var body = "function( a, b ){ console.log(a, b) }"
var wrap = s => "{ return " + body + " };" //return the block having function expression
var func = new Function( wrap(body) );
func.call( null ).call( null, 1, 2  ); //invoke the function using arguments
&#13;
&#13;
&#13;

答案 1 :(得分:1)

Eval评估你给它的任何东西,甚至返回一个函数。

var x = eval('(y)=>y+1');
x(3) // return 4

所以你可以像这样使用它:

var lim = 3;
var body = 'return lim+1;';
JSON.stringify(eval('(lim) => {' + body + '}')(lim)); //returns "4"

使用Function的另一种方式:

var lim = 3;
JSON.stringify((new Function('lim', this.selectedFunction.body))(lim));

答案 2 :(得分:1)

您可以使用 Function 对象。

var param1 = 666;
var param2 = 'ABC';
var dynamicJS = 'return `Param1 = ${param1}, Param2 = ${param2}`';
var func = new Function('param1', 'param2', dynamicJS);
var result = func(param1, param2);
console.log(result);