我使用eval()
来执行来自服务器的ajax请求返回的javascript。但是,我无法调用使用eval()创建的函数并获得ReferenceError: function is not defined
。
使用eval()执行的javascript内的函数无法访问是否正常?有没有办法访问这些功能?
我认为这个简单的jsFiddle说明了这个问题:http://jsfiddle.net/M2GLs/
答案 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');
b
在a
的范围内定义,并且只能在此范围内访问(demo)。在您的情况下,函数定义在eval中,但同样的规则适用于那里。在这种情况下,在function(r)
的范围内。您无法在a.onclick
内访问此函数的范围,因此您必须更改函数定义。或者,您可以在eval(jsFiddle)之后绑定点击,因为它仍然在范围内:
js = "function someFunction() { alert('function called') }"
eval(js)
document.getElementById('myA').onclick = someFunction;