<HTML>
<BODY>
<FORM>
<INPUT TYPE="button" NAME="button" value="test3" onclick="javascript:a2('rrrrrrr')">
</FORM>
<script>function a2(pram){
     alert(" it is in a2 param1="+pram);
 setTimeout(function(){a2('sss1')},3000); //为什么setTimeout后面的第一个参数不能加双引号?
 setTimeout("a2('sss2')",5000); //为什么setTimeout后面的第一个参数必须加双引号?
}
</script>
 </BODY>
</HTML>

解决方案 »

  1.   

    setTimeout()第一个参数调用函数数  不带括号不用双引号  带括号必须带双引号 
      

  2.   

    第一次调用,function(){a2('sss1') 它的外面不能加双引号啊,你的解释不太通
      

  3.   

    setTimeout("函数名",毫秒数); 规则就这样的!就这样使用即可! 
      

  4.   

    setTimeout(function(){a2('sss1')},3000); //传递一个js函数供定时器执行
    setTimeout("a2('sss2')",5000); //直接传递js语句供定时器执行; 
    setTimeout("a2();alert('123');",5000);//这也是合法的,第二种方式和这个是一个道理也就是说setTimeOut第一个参数可以有两种类型,传递functiond的话就定时调用函数,传递字符串的话就当作js语句执行,明白了么?
      

  5.   

    setTimeout 第一个参数是 function 如果是 string , 会 创建 new Function() 并调用
    相当于:new Function('alert(111)')()
    function(){} 是匿名函数,会被直接调用 相当于 
    (function(){alert(111)})()
      

  6.   


    to wzs_xyz:非常感谢!但是想补充问一下,JS解析,可以知道参数是String,但是可以知道这是一个函数指针吗?
      

  7.   

    <HTML>
     <BODY>
    <FORM>
            <!-- 这是一个成功的匿名调用  a2的第二个参数,传入了一个字符串,这里是传入了一个字符串-->
    <INPUT TYPE="button" NAME="button" value="test1" onclick="javascript:a2('param1','(function(x,y){ alert(x+y);return x+y; }(3,4)) ' )">        <!-- 这里a2 的第二个参数,传入的是一个函数-->
    <INPUT TYPE="button" NAME="button" value="test3" onclick="javascript:a2('param1', function(x,y){ alert(x+y);return x+y; }  )"></FORM>
    <script>
    function average(x, y){
    alert(x+y);
    return x+y;
    }function average2(){
    alert("333");
    }//a2的第二个参数,可以是一个函数指针,也可以是字符串,类似setTimeout 
    function a2(param1, param2){
        alert(" it's in a2 param1=" + param1);
    if(typeof(param2) == "function" ){
        alert("22222");
    new function(){param2}();   //这样的调用不成功,请问该怎么写?如何调用传入的这个参数?
    alert("3333");
    }else if (typeof(param2) == "string" ){
    eval(param2);               //这样的调用OK
    };
    alert(" it's in a2 param2=" + param1);
    }
    </script>
     </BODY>
    </HTML>
      

  8.   

    你直接传入"函数名()"就可以调用你写好的函数阿<script>
    function a1(pram){
      alert(" it is in a2 param1="+pram);
    setTimeout("a3()",5000); 
    }
    function a3(){
    //.....
    }</script>//如果你要传string参数可以这样:
    setTimeout("a2("+ param +")",5000);
      

  9.   

    <HTML>
     <BODY>
    <FORM>
            <!-- 这是一个成功的匿名调用  a2的第二个参数,传入了一个字符串,这里是传入了一个字符串-->
    <INPUT TYPE="button" NAME="button" value="test1" onclick="javascript:a2('param1','(function(x,y){ alert(x+y);return x+y; }(3,4)) ' )">        <!-- 这里a2 的第二个参数,传入的是一个函数执政,但是具体实参,只能放在 a2函数里了,所以对已带有实参的,最好不要采用这种方式-->
    <INPUT TYPE="button" NAME="button" value="test2" onclick="javascript:a2('param1', function(x,y){ alert(x+y);return x+y; }  )"></FORM>
    <script>
    function average(x, y){
    alert(x+y);
    return x+y;
    }function average2(){
    alert("333");
    }//a2的第二个参数,可以是一个函数指针,也可以是字符串,类似setTimeout 
    function a2(param1, param2){
        alert(" it's in a2 param1=" + param1);
    if(typeof(param2) == "function" ){
    new function(){param2(3,4)}();   //这样的调用不成功,请问该怎么写?如何调用传入的这个参数?
    }else if (typeof(param2) == "string" ){
    eval(param2);               //这样的调用OK
    };
    alert(" it's in a2 param2=" + param1);
    }
    </script>
     </BODY>
    </HTML>摸索出来了,谢谢各位,结贴赠分,多谢