自调用closure
函数的奇怪语法意味着您本质上是在调用函数本身,因此将其设为self-invoking
. 这里有一些代码证明了这一点:
<!DOCTYPE html>
<html>
<head>
<title>
A Nameless Function that Executes Itself
</title>
</head>
<body onload = "mainMethod();">
<div id = "here"></div>
<script type = "text/javascript">
function mainMethod()
{
var here = document.getElementById("here");
var hello = "Hello World!";
here.innerHTML = function()
{
return hello + "<br />";
}(); // WITH method parentheses -- self-invoking
here.innerHTML += function()
{
return hello;
}; // withOUT method parentheses
}
</script>
</body>
</html>
...上面的第二个函数没有执行,因为它缺少结束括号,并且innerHTML
变成了整个函数本身。那么,为什么您的标准 Ajax 语法不以同样的方式使用自调用呢?似乎这些属性以独特的方式处理XMLHttpRequest
。onreadystatechange
这是一个例子:
function getStock()
{
var req = new XMLHttpRequest();
var stock = document.getElementById("stock");
req.onreadystatechange = function()
{
if( (req.readyState == 4) && (req.status == 200) )
{
// value of stock
var stockValue = req.responseText;
stock.innerHTML = stockValue;
}
}
req.open("GET", "randomStockValue.php?random=", true);
req.send(null);
setTimeout("getStock()", 1000);
}
注意没有结束括号...我问这个是因为我想进一步了解 Ajax 语法,以及它到底在做什么。