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

时间:2014-07-31 13:53:15

标签: javascript eval

我使用eval()来执行来自服务器的ajax请求返回的javascript。但是,我无法调用使用eval()创建的函数并获得ReferenceError: function is not defined

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

我认为这个简单的jsFiddle说明了这个问题:http://jsfiddle.net/M2GLs/

1 个答案:

答案 0 :(得分:1)

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

window.addFeatureToTable = function() { 
    // definition
}

强制它在窗口范围内。

工作JsFiddle

在评论中回答您的问题:

你实际拥有的是这样的代码:

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

a();
b('outside');

ba的范围内定义,并且只能在此范围内访问(demo)。在您的情况下,函数定义在eval中,但同样的规则适用于那里。在这种情况下,在function(r)的范围内。您无法在a.onclick内访问此函数的范围,因此您必须更改函数定义。或者,您可以在eval(jsFiddle)之后绑定点击,因为它仍然在范围内:

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