假设我们有一个像这样的函数test
:
function test(input) {
console.log(input);
}
我们可以简单地这样称呼它:
test("hello");
现在,我的问题是我有一个像这样的字符串:
test(hello); test(world); test(foo); test(bar);
我需要跑步。我使用eval
这样做,但是因为未定义变量hello
,word
,foo
,bar
,...,eval
会抛出ReferenceError
。
我需要以某种方式强制JavaScript将所有未定义的变量视为字符串。我需要它像这样运行:
test("hello"); test("world"); test("foo"); test("bar");
有时还会有嵌套函数。
有什么办法吗?
答案 0 :(得分:0)
由于您将输入作为字符串输入-您可以尝试将所有(
替换为("
,并将所有)
替换为")
,以便在内部转换var括号成字符串。
function test(str) {
console.log(str);
}
var initialString = "test(hello); test(world); test(foo); test(bar);";
var transformedString = initialString.replace(/\((\w+)\)/g, '("$1")');
eval(transformedString);
eval("test(test(test(test(test(hello)))))".replace(/\((\w+)\)/g, '("$1")'));
但是,绝对地,这不是一个好的解决方案(如评论中所述),而只是一种蛮力的方法。
更新:已更新答案以支持嵌套调用。