(function() 在这个特定的代码段中是什么意思

What does (function() mean in this particular code segment?

本文关键字:代码 段中 意思 是什么 function      更新时间:2023-09-26

我正在 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() {"部分和此代码段末尾的所有结尾大括号。问题是我不明白"(function{"的目的,FF似乎也不明白(它不承认这个段是Javascript,直到我去掉了"(function{"部分。有谁知道这段代码的目的?我知道我也在某处见过它,这次我想知道它到底是什么意思。

提前感谢您的帮助。

这个:

(function() {
    ...
})();

创建一个函数并立即调用它,并具有自己的作用域。 一个常见的术语是IIFE - "立即调用的函数表达式"。

在这种情况下,您无意中合并了最后两行,因此提及bwalton的单行注释通过删除尾随) ();破坏了代码。

如果没有尾随()则有一个函数引用,但不会调用它。

要修复代码副本,您需要做的就是在 bwalton 5/11/11. 之后添加回车符。

(function() { /* code here */ })();创建一个匿名函数并就地执行它。目的之一是创建本地范围。

你看到吗 ()();

这是附加到某个值的调用括号。现在。

(function(){});

是一个函数,一个封闭在括号下的匿名函数。 把它全部加起来。

(function(){}) ();

对括在括号中的函数的调用。了不起!!

如上所述,这是一个闭包,请参阅链接以获取有关闭包的更多信息 http://jibbering.com/faq/notes/closures/