1

コミュニティよ!ここでいくつかの洞察が必要になるかもしれません.. :)私はさらに高度なjsの概念を学んでいます。このコードを実行していますが、結果が期待どおりに表示されません..エラーが表示されません...何か考えはありますか? ありがとう!

<script type="text/javascript">

    (function() {
        var results, queue = [];
        this.assert = function(pass, msg) {
            var type = pass ? "PASS" : "FAIL";
            var str = "<li class='" + type + "'><b>" +
                      type + "</b> " + msg + "</li>";
            if ( queue )
                queue.push( str );
            else    
                results.innerHTML += str;
        };

        window.addEventListener("load", function() {
            results = document.getElementById("results");
            results.innerHTML = queue.join('');
            queue = null;
        });

        // calling assert but it's not showing up the <li> with the message....( why? ) 
        assert( true, "I always pass!" );
    })();
</script>
4

1 に答える 1

0

「.else-statement が使用される可能性はありますか? else-statement のアイデアはなぜですか?」

この関数が機能する方法は、ドキュメント ロード イベントが発生するassert()に呼び出された場合、結果が配列に格納されるというものです。配列を参照するため、条件は true になります。queueif (queue)queue

次に、ロード ハンドラーが実行されると、既に含まれているすべてのものを受け取り、nullに設定する前にqueueそれを要素に出力します。resultsqueue

results.innerHTML = queue.join('');
queue = null;

ドキュメントのロードassert() にを呼び出すと、それが null であるためif (queue)false であることがわかります。そのため、が実行され、結果が要素に直接出力されます。queueelseresults

示されているように、コードには への呼び出しが 1 つだけありassert()、ドキュメント ロード ハンドラが実行される前に発生します。

(これの不格好なデモがあります-ボタンを押すと、ロードイベントの後に行われます:http://jsfiddle.net/JDFuR/1/

于 2012-06-13T21:30:23.657 に答える