Sak*_*kar 3 javascript eval parameter-passing
我将函数体存储在带有函数名称的字符串中。
function fnRandom(lim){
var data=[];
for(var i=0;i<lim;i++)
{
data=data.concat(Math.floor((Math.random() * 100) + 1));
}
return data;
}
Run Code Online (Sandbox Code Playgroud)
从下拉列表中选择functionName之后,我使用eval执行函数主体。
JSON.stringify(eval(this.selectedFunction.body));
Run Code Online (Sandbox Code Playgroud)
我想将“ lim”传递给此执行,还是可以将functionName用作执行的起始点?
Eval 会评估您赋予的任何内容,甚至返回一个函数。
var x = eval('(y)=>y+1');
x(3) // return 4
Run Code Online (Sandbox Code Playgroud)
所以你可以这样使用它:
var lim = 3;
var body = 'return lim+1;';
JSON.stringify(eval('(lim) => {' + body + '}')(lim)); //returns "4"
Run Code Online (Sandbox Code Playgroud)
另一种使用函数的方式:
var lim = 3;
JSON.stringify((new Function('lim', this.selectedFunction.body))(lim));
Run Code Online (Sandbox Code Playgroud)
使用函数构造函数
var body = "console.log(arguments)"
var func = new Function( body );
func.call( null, 1, 2 ); //invoke the function using argumentsRun Code Online (Sandbox Code Playgroud)
具有命名参数
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 argumentsRun Code Online (Sandbox Code Playgroud)