Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript';具有多个依赖函数的s eval()_Javascript_Eval - Fatal编程技术网

使用JavaScript';具有多个依赖函数的s eval()

使用JavaScript';具有多个依赖函数的s eval(),javascript,eval,Javascript,Eval,如何将动态依赖项加载到eval()调用中?(如果可能的话) 我试图使用多个函数运行对eval()的调用,但似乎无法使其正常工作。即: function foo() { return bar; } function foo2() { return foo(); } 理想情况下,我想工作的是: eval(" (function() { function foo() { return bar; }

如何将动态依赖项加载到
eval()
调用中?(如果可能的话)

我试图使用多个函数运行对
eval()
的调用,但似乎无法使其正常工作。即:

function foo() {
    return bar;
}

function foo2() {
    return foo();
}
理想情况下,我想工作的是:

eval("
    (function() { 
        function foo() {
            return bar;
        }

        return foo(); 
     }())
");
但我一直收到一个错误,即未定义
foo

我知道如果在我的页面的html中定义了
foo()
,那么我可以使用
eval()
编写一个基本上是
foo2()
的函数,并得到我想要的结果:

eval("
    (function() { 
        return foo(); 
     }())
");

但是我希望能够更改这两个函数,并且仍然能够调用
foo2()
,它将始终引用
foo()
。这可能吗?有什么方法可以让它工作呢?

是的,这是可能的,只要确保
eval
ed代码用新声明覆盖原始函数,通常是在全局范围内。

尝试使用语法
var foo=function(){}在您的eval中,我不知道如何使多行js字符串不存在,而是eval的“;”beetween指令

尝试将其键入文本区域:

function hello(name) {
  alert("hello" + name);
}
然后
func
将是对
hello
的引用(
func==hello
)。然后您可以使用
func
来测试测试用例,就像它是
hello
一样

var ta=document.getElementById(“代码”);
函数运行(){
var code=“(function(){return”+ta.value+”;})();//将返回对用户键入的函数的引用的代码
var func=eval(code);//func将是用户在文本区域中键入的函数
func(“我”);//你可以随意称呼它
}


运行
我知道这很旧,但我找到了一种方法。您必须在每行末尾加上
\
和转义引号:

var canvas = document.createElement('canvas')
canvas.id = 'dailyTotalUsersCreated';
canvas.setAttribute('class', `bar dailyChart`)
var container = document.querySelector(`#daily`)
container.appendChild(canvas)
eval(` \
    var ${canvas.id} = new Chart('${canvas.id}', { \
        type: 'bar', \
        data: { \
            labels: [${lastSevenDays.map(obj => `"${new Date(obj.Date).toDateString()}"`)}], \
            datasets: [
                { \
                    label: 'Total Voice Users Created', \
                    data: [${lastSevenDays.map(obj => `${obj.Values.filter(obj => { return obj.Name === "Users Created" }).map(obj => totalUsersCreated - obj.Value)}`)}], \
                    backgroundColor: ['#3e95cd','#8e5ea2','#3cba9f','#e8c3b9','#c45850','#facb48','#384d3f','#247BA0','#F3FFBD','#FF1654'], \
                } \
            ] \
        }, \
        options: { \
            plugins: { \
                datalabels: { \
                    labels: { \
                        title: { \
                            color: 'black' \
                        } \
                    } \
                } \
            }, \
            scales: { \
                yAxes: [{
                    stacked: false,
                    gridLines: {
                        display: true,
                        color: "rgba(255,99,132,0.2)"
                    },
                    ticks: {
                        beginAtZero: true
                    }
                }]
            } \
        } \
    }); \
`);

为什么要尝试使用
eval()
?你可能听过这个,但它的使用几乎总是不被鼓励的。eval是邪恶的@哈里斯温斯坦:我以前听过。我使用它来运行用户输入的javascript,然后计算它的返回值。基本上是一个非常简单的编程比赛,就像软件没有比赛一样part@HarrisWeinstein我也正在采取措施,以确保用户输入的JS将无法发送给任何其他人。用户编写的代码不能共享,除非他们手动复制。“我似乎无法让它工作”-请发布您正在使用的确切代码、要评估的输入字符串以及您收到的错误。我几乎尝试过以字符串形式添加两个函数的任何组合。通常我会收到一个错误“意外的关键字'function'”或类似的东西。和评估呼叫是否持续?i、 e我对一个函数调用eval,我可以稍后在eval之外调用该函数吗?(可能通过另一个eval调用)这听起来像是语法错误,因为传递了错误的字符串。但是是的,
eval
结果仍然存在,当然它们存储的范围可能会消失<代码>评估(“a=1”);eval(“警报(a)”工作正常。我刚刚意识到我没有尝试所有可能的组合。我不停地漏掉第一句话(“当我用两个函数构建我的eval查询时…………不,这没有任何区别,尽管他需要删除IIFEyou代码在我的chrome上工作,它说bar没有定义,但他使用了eval的新foo。谢谢!我在你发布之前就已经让它工作了。我真的很感激,因为我不知道你可以使用c运行完eval之外的所有函数后eval@Chris
eval
将返回代码的评估值。由于代码将是一个返回函数的异常函数,
eval
的返回值将是对该函数的引用,您可以使用该函数以您想要的方式测试测试用例!