0

私は短いJavaScriptプログラムに取り組んでいます。これは、特定の場所にvarasd;などの些細なステートメントを挿入した場合にのみ完全に正常に機能します。このプログラムは、単純なカプセル化手法を示すことを目的としています。

他の場所は機能しません。些細なことなら何でも機能します。私はDOMを扱っていないので、これはDOMの負荷の問題ではありません。

動作するバージョン:(警告、3つのアラート) http://jsfiddle.net/bZUm6/3/

動作しないバージョン:http: //jsfiddle.net/bZUm6/2/

「varasd;」に注意してください。最初のバージョンで。

誰かが理由を教えてもらえますか?とても感謝しております。

マックス

4

5 に答える 5

5

それを壊しているのはセミコロンの除去です。

変更しても動作します...

var asd;

単にこれに...

;

その理由は、コードの次の行がで始まり(、関数を閉じてラップしているため)です。

これは関数呼び出し演算子として解釈されており、前の式を呼び出そうとしています。

    MyApp.util.toXML = function(options, obj) {
        // your code

        return result.join("");
    }

//    var asd;   // removing the semicolon

//  |------seen as invoking the result of the previous expression and passing
//  v         the function as an argument. 
    (function(toXML) {

        // your code

    })(MyApp.util.toXML);
//     ^---------------^ This is then attempting to invoke the return value
//     of "toXML", which if it successfully returned, returned a String, which 
//     can't be invoked.
于 2012-04-12T01:10:19.783 に答える
2

あなたがするとき

MyApp.util.toXML = function(options, obj) {
}

(function(){
}());

あなたは実際に関数を呼び出しています

MyApp.util.toXML = function(options, obj) {
}( function(){}()) );
于 2012-04-12T01:11:57.407 に答える
0

;関数定義の後を忘れています

MyApp.util.toXML = function() {
 // code
}; // this semicolon
于 2012-04-12T01:12:17.000 に答える
0

セミコロンを忘れた、それだけです。http://jsfiddle.net/bZUm6/6/(動作中)を参照してください。

;関数の割り当て後は、 !を忘れないでください。

于 2012-04-12T01:13:21.417 に答える
0

http://jsfiddle.net/bZUm6/8/

関数の後にセミコロンがありません。あなたがステートメントを終わらせなければ、それは何か他のものに評価されると思います。

于 2012-04-12T01:15:15.460 に答える