我(重新)在https://developer.mozilla.org/en/AJAX/Getting_Started上从Mozilla网站学习Ajax,我面对这段代码:
(function () {
var httpRequest;
document.getElementById("ajaxButton").onclick = function () {
makeRequest('test.html');
};
function makeRequest(url) {
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
try {
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!httpRequest) {
alert('Giving up :( Cannot create an XMLHTTP instance');
return false;
}
httpRequest.onreadystatechange = alertContents;
httpRequest.open('GET', url);
httpRequest.send();
}
function alertContents() {
if (httpRequest.readyState === 4) {
if (httpRequest.status === 200) {
alert(httpRequest.responseText);
} else {
alert('There was a problem with the request.');
}
}
}
} //missing closing bracket added by bwalton 5/11/11. )();
虽然我设法理解了代码并使其工作,但直到我剥离了“(function(){”部分在顶部以及此代码段末尾的所有结束括号。事情是我不明白“(函数{”的目的,似乎也没有FF。(在我剥离“(函数{”部分之前,它不会将此段识别为Javascript。有没有人知道这段的目的代码?我知道我也在某处看过它,这次我想确切地知道它的含义。
提前感谢您的帮助。
答案 0 :(得分:7)
此:
(function() {
...
})();
创建一个函数并立即调用它,具有自己的作用域。一个常见的术语是IIFE - “立即调用函数表达式”。
在这种情况下,您无意中合并了最后两行,因此提及bwalton
的单行评论通过删除尾随) ();
来破坏了代码。
没有尾随()
你有一个函数引用,但它没有被调用。
修复代码副本所需要做的只是在bwalton 5/11/11.
之后添加回车。
答案 1 :(得分:2)
(function() { /* code here */ })();
创建一个匿名函数并在适当的位置执行它。其中一个目的是创建一个本地范围。
答案 2 :(得分:0)
这是附加到某个值的调用括号。现在
(function(){});
是一个函数,在括号下关闭的匿名函数。 全部添加。
(function(){}) ();
调用括号中的函数。 惊人!!
答案 3 :(得分:0)
如上所述,这是一个闭包,请参阅链接以获取有关闭包http://jibbering.com/faq/notes/closures/
的更多信息