gpt4 book ai didi

javascript - 带有可变参数的 new Function()

转载 作者:行者123 更新时间:2023-12-02 23:16:10 27 4
gpt4 key购买 nike

我需要使用 new Function() 构造函数创建一个具有可变数量参数的函数。像这样的事情:

args = ['a', 'b'];
body = 'return(a + b);';

myFunc = new Function(args, body);

没有eval()是否可以做到这一点?

<小时/>

非常感谢你们,伙计们!事实上,a+b 并不是我最关心的。我正在编写一个可以处理和扩展模板的代码,我需要将未知(和可变)数量的参数传递到函数中,以便将它们作为局部变量引入。

例如,如果模板包含:

<span> =a </span> 

我需要输出参数a的值。也就是说,如果用户将扩展函数声明为

var expand = tplCompile('template', a, b, c) 

然后调用

expand(4, 2, 1) 

我需要将 =a 替换为 4。是的,我很清楚 Function 与 eval() 类似并且运行速度非常慢,但我没有任何其他选择。

最佳答案

您可以使用 apply() 来执行此操作:

args = ['a', 'b', 'return(a + b);'];
myFunc = Function.apply(null, args);

如果没有 new 运算符,Function 会给出完全相同的结果。您可以使用数组函数,如 push() , unshift()splice()在将数组传递给 apply 之前修改该数组。

您还可以将逗号分隔的参数字符串传递给函数:

args = 'a, b';
body = 'return(a + b);';

myFunc = new Function(args, body);

顺便说一句,您是否知道 arguments目的?它允许您使用数组样式括号表示法获取传递到函数中的所有参数:

myFunc = function () {
var total = 0;

for (var i=0; i < arguments.length; i++)
total += arguments[i];

return total;
}

myFunc(a, b);

这比使用Function构造函数更有效,并且可能是实现您需要的更合适的方法。

关于javascript - 带有可变参数的 new Function(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4183591/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com