首页 > 解决方案 > 如何更新我的 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 ?

那么,你能教你在哪里更新我的代码吗?

提前致谢

标签: javascriptfunctionscope

解决方案


推荐阅读