如何在eval()范围内访问javascript函数

如何在eval()范围内访问javascript函数,javascript,eval,Javascript,Eval,我使用eval()执行服务器的ajax请求返回的javascript。但是,我无法调用使用eval()创建的函数,该函数得到了一个ReferenceError:函数未定义 无法访问使用eval()执行的javascript中的函数是否正常?有没有办法访问这些功能 我认为这个简单的jsFiddle说明了问题:创建的函数不在正确的范围内。所以你的onclick看不到它。使用 window.addFeatureToTable = function() { // definition } 在

我使用
eval()
执行服务器的ajax请求返回的javascript。但是,我无法调用使用eval()创建的函数,该函数得到了一个
ReferenceError:函数未定义

无法访问使用eval()执行的javascript中的函数是否正常?有没有办法访问这些功能


我认为这个简单的jsFiddle说明了问题:

创建的函数不在正确的范围内。所以你的onclick看不到它。使用

window.addFeatureToTable = function() { 
    // definition
}
在窗口范围内强制执行

工作

在评论中回答您的问题:

您实际拥有的代码类似于以下代码:

function a()
{
    function b(where) {
        alert('b can be called inside a, but not outside, we are now ' + where);
    }
    b('inside');
}

a();
b('outside');
b
a
的范围内定义,只能在此范围内访问()。在您的例子中,函数定义在eval中,但同样的规则适用于eval。在这种情况下,在
功能(r)
的范围内。无法从
a.onclick
中访问此函数的范围,因此必须更改函数定义。或者,您可以在eval()之后绑定on click,因为它仍然在范围内:

js = "function someFunction() { alert('function called') }"
eval(js)
document.getElementById('myA').onclick = someFunction;

您能为这个发布一个JSFIDLE或示例代码吗?我很难理解这个问题。谢谢,回答你的最后一个问题:每个函数都可以访问;)对ajax调用返回的内容进行评估的ajax调用?我会认真考虑重新思考你的架构。@ Trasababuro,它是一个完整的异步应用程序:P,但是你的评论是正确的!这就是解决方案,你能详细说明为什么函数不在正确的范围内吗?它在什么范围内?是否可以调用指定正确作用域的函数?@BelowtheRadar-我用编辑回答了您的问题(无法放入注释;)