(function()在这个特定的代码段中意味着什么?

时间:2012-04-12 09:18:02

标签: javascript ajax mozilla

我(重新)在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。有没有人知道这段的目的代码?我知道我也在某处看过它,这次我想确切地知道它的含义。

提前感谢您的帮助。

4 个答案:

答案 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/

的更多信息