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 语句?为什么会有 else 语句的想法?”

assert()函数的工作方式是,如果在文档加载事件发生之前queue调用它,则任何结果都存储在数组中:条件if (queue)为真,因为queue引用了数组。

然后,当负载处理程序运行时,它会将所有内容都放入queue其中并将其输出到results元素,然后再设置queue为 null:

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

assert() 文档加载后的任何调用都会发现它if (queue)是 false,因为queue它是 null,因此else将执行 并且任何结果都将直接输出到results元素。

如图所示,在您的代码中,只有一次调用assert(),它将在文档加载处理程序运行之前发生。

(这是一个笨拙的演示 - 按下按钮将在加载事件之后:http: //jsfiddle.net/JDFuR/1/

于 2012-06-13T21:30:23.657 回答