在AJAX / JavaScript中,如何引用未定义的变量(匿名函数)?

时间:2012-01-20 23:44:12

标签: javascript ajax

我正在关注关于AJAX的W3Schools教程,它提供了一个使用JavaScript回调函数here的示例(下面粘贴的代码):

<html>
<head>
<script type="text/javascript">
var xmlhttp;
function loadXMLDoc(url,cfunc)
{
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=cfunc;
xmlhttp.open("GET",url,true);
xmlhttp.send();
}
function myFunction()
{
loadXMLDoc("ajax_info.txt",function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  });
}
</script>
</head>
<body>

<div id="myDiv"><h2>Let AJAX change this text</h2></div>
<button type="button" onclick="myFunction()">Change Content</button>

</body>
</html>

让我感到困惑的是,onreadystatechange在触发时如何设置cfunc,但cfunc未定义。我所有的(基本上是基本的)编程经验都说这会导致错误,因为你不能引用变量/ function / etc.在定义之前(或传递它)。

This answer另一个StackOverflow问题说cfunc是另一个函数中定义的“匿名函数”,但这只会让我更加困惑......我是否误解了一些基本的东西?

1 个答案:

答案 0 :(得分:2)

cfunc在此行上分配了一个值:

function loadXMLDoc(url,cfunc)

调用cfunc时传递函数:

loadXMLDoc("ajax_info.txt",function() /* and the next several lines */
  

“匿名函数”在另一个函数中定义,但这只会让我更加困惑......我是否误解了一些基本的东西?

函数只是一种对象。您可以传递它们,就像您可以传递数组,对象,数字和其他任何内容一样。