javascript - 如何更新我的 parse() 函数,使其可以与局部函数和全局函数一起使用?
问题描述
我有两个函数,即antiString()和parse(),其代码如下:
function antiString(obj) {
return Function('"use strict";return (' + obj + ')')();
};
function parsify(str) {
return str.replace(/(\r\n|\n|\r)/gm, " ")
.replace(/@--funs(.*?)--@/g, function(_, mat) {
return antiString(mat);
});
};
让我们考虑一个类似的函数:
function ret(val) {
return "I am " + val.toString()
};
现在用法:
var str = "Do you know who am I ? @--funs ret('Arcanadian') --@";
console.log( parsify( str ) );
// Output => Do you know whom am I ? I am Arcanadian
代码很漂亮,但我有问题!这仅在@--funs和--@中的函数是全局的时才有效。因此,如果我有很多函数,那么我必须声明很多全局函数。所以我认为我应该转向本地(因为本地因此没有机会与全局交互,顺便说一下,这些函数将专门为parse()设计,所以我认为本地更好,但我也不会删除支持对于全局函数,因为在本地函数中重写相同的全局函数代码没有任何意义,但是是的,它们的确定语法会有所不同。@--lfuns & --@将确定局部函数,而@--gfuns & - -@将确定全局函数)但我不明白该怎么做!但我可以假设parse()函数的新我们将是这样的:
function q(val) {
return "So " + val.toString();
};
var str = "@--lfuns name('Arc') --@. So @--gfuns q('can you help ?') --@";
console.log(
parsify( str, {
name: function(val) {
return "I am " + val.toString();
}
})
);
// Output => I am Arc. So can you help ?
那么,你能教你在哪里更新我的代码吗?
提前致谢