Javascript eval()不总是处理附加到div内容的文本

Javascript eval()不总是处理附加到div内容的文本,javascript,jquery,ajax,dom,eval,Javascript,Jquery,Ajax,Dom,Eval,我使用AJAX将动态内容加载到#main_content元素: var con = document.getElementById('main-content'); con.innerHTML = xhr.responseText; 但是,innerHTML不会在script元素中运行JS。为了评估它们,我使用 $("#main-content").find("script").each(function(i) { eval($(this).text()); console.log($

我使用AJAX将动态内容加载到
#main_content
元素:

var con = document.getElementById('main-content');
con.innerHTML = xhr.responseText;
但是,
innerHTML
不会在
script
元素中运行JS。为了评估它们,我使用

$("#main-content").find("script").each(function(i) {
  eval($(this).text());
  console.log($(this).text);
});
我加载的一个页面具有以下
元素,该元素将被执行,并按预期工作:

<!-- AJAX response -->
<script>alert(123);</script>

警报(123);
但是,如果我在AJAX请求中定义函数,当我尝试调用它们时,它们会显示为未定义:

<!-- AJAX response -->
<script>
function func() {
  alert(123);
}
</script>

函数func(){
警报(123);
}

我不知道为什么第一个
元素得到计算和执行,而第二个元素没有。它们都被同一个函数调用,以加载和计算div的内容。

问题是,在非严格模式下,由a计算的全局变量将成为称为
eval
的范围的局部变量:

var code = "var foo = 123";
(function() {
  eval(code); // direct call
  foo; // 123
})();
foo; // ReferenceError: foo is not defined
在严格模式下有一些,因此中的变量也不会在局部范围内创建

相反,如果希望变量变为全局变量,可以使用间接求值调用:

var code = "var foo = 123";
(function() {
  window.eval(code); // indirect call
  foo; // 123
})();
foo; // 123

这在中进行了解释。

问题在于,在非严格模式下,由a评估的全局变量将成为范围的局部变量,该范围称为
eval

var code = "var foo = 123";
(function() {
  eval(code); // direct call
  foo; // 123
})();
foo; // ReferenceError: foo is not defined
在严格模式下有一些,因此中的变量也不会在局部范围内创建

相反,如果希望变量变为全局变量,可以使用间接求值调用:

var code = "var foo = 123";
(function() {
  window.eval(code); // indirect call
  foo; // 123
})();
foo; // 123

这在中进行了解释。

您需要全局
eval
抱歉,什么是全局eval vs eval?您需要全局
eval
抱歉,什么是全局eval vs eval?就是这样。谢谢我不明白为什么eval不在窗户上工作,但我接受了!成功了。谢谢我不明白为什么eval不在窗户上工作,但我接受了!