2

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 のようには見えません。("(function{" の部分を取り除くまで、このセグメントは Javascript として認識されません。コードのこのセグメントの目的を知っている人はいますか?私もどこかで見たことがあるので、今回はその意味を正確に知りたいと思っています。

よろしくお願いします。

4

4 に答える 4

7

これ:

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

関数を作成し、独自のスコープですぐに呼び出します。これの一般的な用語は IIFE - 「即時に呼び出される関数式」です。

この場合、うっかり最後の 2 行を結合してしまったため、1 行のコメントに言及bwaltonしたことで末尾の) ();.

末尾() がなければ、関数参照がありますが、呼び出されません。

コードのコピーを修正するために必要なことは、 の後にキャリッジ リターンを追加することだけbwalton 5/11/11.です。

于 2012-04-12T09:20:28.917 に答える
2

(function() { /* code here */ })();無名関数を作成し、その場で実行します。目的の 1 つは、ローカル スコープを作成することです。

于 2012-04-12T09:20:51.067 に答える
0

見えますか ()();

これは、何らかの値に付加された呼び出し括弧です。今。

(function(){});

関数であり、括弧で閉じられた無名関数です。それをすべて追加します。

(function(){}) ();

括弧で囲まれた関数の呼び出し。すばらしい!!

于 2012-04-12T09:22:10.427 に答える
0

上で説明したように、これはクロージャーです。クロージャーの詳細については、リンクを参照してくださいhttp://jibbering.com/faq/notes/closures/

于 2012-04-12T09:28:35.763 に答える