有没有办法制作eval()加载函数?

时间:2014-08-09 13:35:45

标签: javascript eval

后台:我正在尝试创建一个在单个页面中运行的在线应用程序。该页面将包含一个元素,当用户浏览应用程序时,我将在运行时更改其内容。我想在运行时加载东西以避免应用程序的大的初始加载时间。

问题:我一直在加载页面元素我认为我已经掌握了,但我无法解决如何加载JavaScript以与每个集合一起使用我加载元素时的元素。我认为我使用的是eval(),但我遇到了一个问题 - 我收到如下错误:ReferenceError: testEval is not defined,所以eval()似乎没有加载函数,我期待它。下面的代码重现了这个问题。

我是否遗漏了有关如何使用eval的内容?还有其他选择吗?

我考虑在评估的脚本中创建一个对象,然后引用它以使用其功能并使用bind()来设置事件处理。但是,我得到的印象是,我可能会不必要地过度复杂化(因为我倾向于)。此外,它还试图找出如何将函数添加到没有Object Constructor创建的对象(另一个函数,D'哦!)。

请帮忙。

function publiListElementLoad(result) {
    testEval();
}

function publiListScriptLoad() {
    eval("function testEval(){}");
}

publiListScriptLoad();
publiListElementLoad(result);

2 个答案:

答案 0 :(得分:1)

您可以根据需要动态创建脚本标记以获取额外的JS:

   var head= document.getElementsByTagName('head')[0];
   var script= document.createElement('script');
   script.type= 'text/javascript';
   script.src= 'somefile.js';
   head.appendChild(script);

答案 1 :(得分:0)

eval将在当前作用域中设置它,即publiListScriptLoad函数,并且您希望它在全局作用域中声明。

要解决这个问题,你可以将你的功能添加到窗口对象

工作版本:http://jsfiddle.net/y50xtf31/

function publiListElementLoad(result) {
    testEval();
}

function publiListScriptLoad() {
    eval("window.testEval = function() { alert('Hello World');}");
}

publiListScriptLoad();
publiListElementLoad("");

但要注意eval-function - 它是一个功能过于强大的功能,应该非常谨慎使用。