只要能实现带参数的函数的调用即可
function add(x, y) {
return x + y;
}
console.log(eval('add(1,2)'));
只要能实现带参数的函数的调用即可
function add(x, y) {
return x + y;
}
console.log(eval('add(1,2)'));
JS 函数的参数可以塞任何东西:
function testFunc(x, y){
return x + y;
};
// 你可以这样调用:
testFunc(1, 2); // 3
// 而这样调用也不应该有问题:
testFunc(
( ( (
((( ( ( (
( ( ( ) => _ => $ => 2))
) ) )
) ) ) ) ) )(
)( )(
),
[function(Number_Duanduanduang$){
const str = Number_Duanduanduang$ + ''
return str.length - 1 ** 1e23 - 1
}][0](undefined * 1234875634627834628398472 / 12345)
); // 3
因此,只要你的要求是可以达到和 eval
一致的解析能力,就必须借助 JISON
等工具,写一个完整的 parser
出来。
几乎等同于用 JS 完整实现 eval
,执行效率和原生的 eval
没得比。
所以除非加上一定的限制,比如传参必须是数字,那么倒是可以针对这个限制条件,写一个简单的解析器。
那么剩下的问题就只有executor
的实现了。
比如说,解析出来"testFunc"
了,如何告诉引擎现在要执行一个叫 testFunc
的函数?
27 回答12.8k 阅读
8 回答3.4k 阅读✓ 已解决
6 回答1.1k 阅读✓ 已解决
5 回答5.2k 阅读✓ 已解决
4 回答1.5k 阅读✓ 已解决
3 回答1.7k 阅读
6 回答896 阅读
使用function?但不知道效率高不高