我试图在这段代码中找到错误,测试我的javascript代码

时间:2012-06-13 12:14:57

标签: javascript

哟社区!可能需要一些见解...... :)我正在学习更多先进的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>

1 个答案:

答案 0 :(得分:0)

  

“。是否有可能使用else语句?为什么是else语句的想法?”

这个assert()函数的工作方式是,如果在之前调用文件加载事件,则任何结果都存储在queue数组中:条件{{ 1}}将为真,因为if (queue)指的是数组。

然后,当加载处理程序运行时,它会占用queue中已有的所有内容,并在将queue设置为null之前将其输出到results元素:

queue

文档加载后对results.innerHTML = queue.join(''); queue = null; 的任何调用都会发现assert()为false,因为if (queue)为空,因此queue将被执行,任何结果将直接输出到else元素。

在您显示的代码中,只有一次results调用,它将在文档加载处理程序运行之前发生。

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