这是我早书上抄的代码  运行提示有问题 21行的msg没有声明
<html>
<head>    
    <script language="javascript">
        function init()
        {
            var msg = "1.后台循环任务,少量UI更新:例如批量上传文件,并提供进度。这" +
        "种情况使用BackgroundWorker组件是非常好的选择。<br />"+
            "2.耗时的后台任务:这里的耗时任务是指一个时间较长的任务,并且不能精确获取进度,如:" +
            "调用一个远程WebService接口。这种情况可以开两个线程,一个工作," +
            "一个更新UI(不能提供进度,只能显示动画表示系统在运行中)。<br />" +
            "3.耗时的 UI任务:当工作压力集中在UI响应上时,可以在工作者线程中增加延时,从而 " +
            "让UI线程获得响应时间。整个工作的总体时间会增加,但用户响应效果会好很多。"
            document.SearchStr.txt.value = msg;
        }
        function replace()
        {
            var key = document.SearchStr.box1.value;
            var rplc = document.SearchStr.box2.value;
            var n = 0;
            while(n != (-1))
            {
                msgQ = msg.subString(n + rplc.length, msg.length);
                msg = msg.substring(0, n) + rplc + msgQ;
                n = n + rplc.length-1;
                n = msg.indexOf(key, n);
            }
            document.SearchStr.txt.value = msg;
        }
    </script>
</head>

<body>
    <script language ="javascript">
        document.write("<hr />");
        document.write("<h3>示例 3.7 文字列检索和置换</h3>");
        document.write("<hr />");
        document.write("<form name ='SearchStr'>");
        document.write("<input type = 'text' name = 'box1' size = '20'><br />");
        document.write("<input type = 'text' name = 'box2' size = '20'><br />");
        document.write("<input type = 'button' value = '置换' onClick = 'replace()'><br />");
        document.write("<textarea name = 'txt' rows = '5' cols = '40'></textarea>");
        init();
        document.write("</form>");
        document.write("<br />");
    </script>
    
</body>

</html>