代码如下, 问题在后面。谢谢了
 <script>
var g = "全局变量";
function show(str) {
    alert("my site: " + str);
}
setTimeout("show(g);",100);  // g是全局变量,函数正确执行
function t() {
    var url = "www.xujiwei.cn";
    var num = 2;
    //setTimeout("alert("+url+")", 3000);    //   解析错误,www未定义 1
    //setTimeout("alert("+num+")", 3000);    //   解析正确,注意与上句对比 2
    //setTimeout("show('url');", 2000);    //   url 3
    //setTimeout("show("+ url +");", 2000);    //   解析错误,www未定义 4
    //setTimeout("show(url);", 2000);    //   解析错误,url未定义 5
    //setTimeout('"show("+ url +");"', 2000);    //   解析错误,url未定义 6
    //setTimeout("show('"+ url +"');", 2000);    // 正确 7
    //setTimeout(function(){show(url);},1000);   // 正确 8
}
t();
</script>
我有几个不懂的地方:
1:在原文注释1处(下同),为什么会这样呢?还有为什么要在url前后加‘+’呢?
7:为什么这句就能正确的解释呢?
谢谢了,一个初学者真诚的感谢您了。

解决方案 »

  1.   

    setTimeout的第一个参数可以是字符串,也可以是函数句柄.
    字符串就是 到时候 要执行的语句
    函数句柄 就是 到时候 要执行的函数
    ========
    那么
    1 的第一个参数是 "alert(" + url + ")" 就是把字符串组成一个语句 
    alert的正确格式是 alert('xx'),字符串两边要引号
    上面 "alert(" + url + ")" 得到的是 alert(www.xujiwei.cn) 显然错误7 拼接出来是 show('www.xujiwei.cn') 是正确的, 字符串两边有引号。  
      

  2.   

    <script>
    var g = "全局变量";
    function show(str) {
        alert("my site: " + str);
    }
    show(g);
    function t() {
        var url = "www.xujiwei.cn";
                        var url2 = "www.baidu.com";     var num = 2; 
        alert(num);      //此时弹出的是字符串:"+url+"
        alert(url);      //此时弹出的是字符串变量url的值:"www.xujiwei.cn"
        alert("+url+");  //此时弹出的是字符串:"+url+"
                        alert(url+" "+url2); //此时弹出的是字符串变量url的值:"www.xujiwei.cn www.baidu.com"
    }
    t();
    </script>
    url的类型为String类型,unm的类型为数值类型。
    alert()方法是window对象的方法,可以直接调用。alert()放发的参数可以是一个字符串变量,或者是数值变量。按理说你的1,2,3,4,6,7都是没有错的。在Javascript中 +号可以将两个字符串连接起来