怎样将一个函数的参数传递到它内部的函数.例如:function d(direct,demo,demo1,demo2){
//还应该添加什么代码?
var v1Scroll = setInterval("Marquee(x,y,z,w)",speed);}
d(1,2,3,4);

解决方案 »

  1.   

    在函数d中,direct,demo,demo1,demo2这四个参数变量对其内部的所有对象都是通用的,就类似于我们在所有函数外面定义的变量是全局变量,对在所有函数中可以直接使用一样。
    所以你可以直接用:
    function d(direct,demo,demo1,demo2){var v1Scroll = setInterval("Marquee(direct,demo,demo1,demo2)",speed);
    }
    d(1,2,3,4);例:
    <input type="text" value="请输入圆的半径" id="banjing" onfocus="this.value='';"><input type="button" value="计算周长和面积" onclick="cal(document.getElementById('banjing').value)">
    <script>
    function cal(r){
      alert('周长:'+zhouchang(r));//调用function zhouchang()
      alert('面积:'+mianji(r));   //调用function mianji()
    }function zhouchang(r){
      return(3.14*2*r);
    }function mianji(r){
      return(3.14*r*r);
    }
    </script>如果你不想用一样的参数变量名,可以在你注释的地方加上变量定义和赋值语句:
    function d(direct,demo,demo1,demo2){
    var x=direct;
    var y=demo;
    var z=demo1;
    var w=demo2;
    var v1Scroll = setInterval("Marquee(x,y,z,w)",speed);
    }
    d(1,2,3,4);
      

  2.   

    <script type="text/javascript">
    function d(direct,demo,demo1,demo2){
    function showD(){
      alert(direct+","+demo+","+demo1+","+demo2);
    }
    showD();}
    window.onload=function(){
    d(1,2,3,4);//输出1,2,3,4
    }
    </script>
      

  3.   

    <html>
    <head>
    <title>左右滚动的图片效果 - 51windows.Net</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <script type="text/javascript">
    var speed=50
    demo2.innerHTML=demo1.innerHTMLfunction d(direct,demo,demo1,demo2){
    var v1Scroll = setInterval("Marquee(direct,demo,demo1,demo2)",speed);
    demo1.onmouseover=function() {clearInterval(v1Scroll)}
    demo1.onmouseout=function() {v1Scroll=setInterval("Marquee(direct,demo,demo1,demo2)",speed)}function Marquee(direct,MainId,contentId,copyId){
    var objMain = document.getElementById(MainId);
    var objContent = document.getElementById(contentId);
    var objCopy = document.getElementById(copyId);
    var mainWidth = objMain.offsetWidth
    var contentWidth = objContent.offsetWidth
    var copyWidth = objCopy.offsetWidth;
    var mainHeight = objMain.offsetHeight;
    var contentHeight = objContent.offsetHeight;
    var copyHeight = objCopy.offsetHeight;
    if (direct=="LEFT"){
    if (copyWidth-objMain.scrollLeft<=0){
    objMain.scrollLeft-=contentWidth;
    }else{
    objMain.scrollLeft+=2;
    }
    }else if (direct=="RIGHT"){
    if (copyWidth-mainWidth-objMain.scrollLeft>=0){
    objMain.scrollLeft=contentWidth + copyWidth - mainWidth;
    }else{
    objMain.scrollLeft-=2;
    }
    }else if (direct=="UP"){
    if (copyHeight-objMain.scrollTop<=0){
    objMain.scrollTop-=contentHeight;
    }else{
    objMain.scrollTop+=2;
    }
    }else if (direct=="DOWN"){
    if (copyHeight-mainHeight-objMain.scrollTop>=0){
    objMain.scrollTop=contentHeight + copyHeight - mainHeight;
    }else{
    objMain.scrollTop-=2;
    }
    }
    }
    }
    d('UP','demo','demo1','demo2')
    </script>我想把脚本的代码封装了但是接口函数写不好
      

  4.   

    你的setInterval语法错了。var v1Scroll = setInterval("Marquee(direct,demo,demo1,demo2)",speed);
    改为:
    var v1Scroll = setInterval(Marquee(direct,demo,demo1,demo2),speed);
    或者把"Marque(...)"拆分开来用加号串起来,参数变量不能放在引号内。你可以在两个函数第一句加上alert(direct)语句来测试参数传递的效果。
      

  5.   

    想不出了,明天再想,头痛。妖怪估计是出在了setInterval上。
      

  6.   

    var v1Scroll = setInterval("Marquee(" + direct + ", " + demo + ", " + demo1 + ", " + demo2 + ")",speed);
      

  7.   

    查了很多资料,大多是说setInterval和setTimeout中第一个参数即函数不能带参数,解决方法大概有两类,一类是用eval,一类是将这个函数再封装到一个函数中,在setInterval中用不带参数的新的函数。但两种方法还是都没试出结果来。不过,最终还是有点收获,看看下面我做的这个例子,关键主要是在实参那里:<HTML>
    <HEAD>
    <TITLE></TITLE>
    </HEAD>
    <BODY>
    <div id=demo style=overflow:hidden;height:150;width:120;>
    <div id=demo1><img height="4"><img src="http://www.csdn.net/Images/logo_csdn.gif">
    <img src="http://images.csdn.net/20070306/API120[1].60.gif">
    <img src="http://zi.csdn.net/intel_120x60.gif">
    <img src="http://community.csdn.net/logo/images/prj.210.67.gif">
    </div>
    <div id=demo2></div>
    </div><script>
    var speed=30;
    demo2.innerHTML=demo1.innerHTML;function roll(direct,demo,demo1,demo2){
      var MyMar=setInterval("Marquee(direct,demo,demo1,demo2)",speed);
      demo.onmouseover=function() {clearInterval(MyMar)}
      demo.onmouseout=function() {MyMar=setInterval("Marquee(direct,demo,demo1,demo2)",speed)}
    }function Marquee(direct,demo,demo1,demo2){
      switch (direct)
      {
      case 'up'://向上滚动
        if(demo2.offsetTop-demo.scrollTop<=0)
          demo.scrollTop-=demo1.offsetHeight;
        else
          demo.scrollTop++;
    break;
      case 'down'://向下滚动
        if(demo1.offsetTop-demo.scrollTop>=0)
          demo.scrollTop+=demo2.offsetHeight;
        else
          demo.scrollTop--;
        break;
      }
    }var direct='up';//将方向定义为一个变量,取值为'up'或'down'
    roll(direct,demo,demo1,demo2);
    //第一个参数用赋值的变量,不要直接用常量(我也不知道为什么,反正这样做把问题解决了)
    //demo,demo1,demo2都是对象,不要加引号
    </script>
    </BODY>
    </HTML>
      

  8.   

    setInterval和setTimeout中第一个参数即函数不能带参数
    我当初遇到这个问题是通过指定脚本语言解决的...
    参考下面这个~
    /*******************************************************************
    参数说明:
    sUrl: 目标URL
    sParameter: 需要传递的字符串
    bAsynchronous: 传输模式(true为异步,false为同步),默认为true
    fnComplete: 传输成功后执行的函数,默认为空函数
    *******************************************************************/
    function PostResult(sUrl, sPostString, bAsynchronous, fnComplete)
    {
    //定义参数默认值
    if (bAsynchronous != false) bAsynchronous = true;
    if (!fnComplete) fnComplete = function fnDefault(){};

    var objXMLHttp = CreateXMLHttpObject();
    objXMLHttp.open("POST", sUrl, bAsynchronous);
    objXMLHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    objXMLHttp.onreadystatechange = CheckPosted;
    objXMLHttp.send(sPostString);

    function CheckPosted()
    {
    if(objXMLHttp.readyState == READY_STATE_COMPLETED)
    {
    if(objXMLHttp.responseText == "ok")
    {
    fnComplete();
    return;
    }
    else
    {
    setTimeout("javascript:PostResult(\"" + sUrl + "\", \"" + sPostString + "\", " + bAsynchronous + ", " + fnComplete + ")", 3000);
    }
    }
    }
    }
      

  9.   

    window._setInterval = function( t, fn, args, o ){
    var f = function(){
    fn.apply( o, args );
    };
    return setInterval( f, t );
    };function d(){
    var v1Scroll = _setInterval( speed, Marquee, arguments );
    }
    d(1,2,3,4);
    =========
    以上即可.