免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2279 | 回复: 3
打印 上一主题 下一主题

一个定义变量的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-17 10:43 |只看该作者 |倒序浏览
代码:
<script langue=jscript>
function showtime(itime1,itime2){
        var stime1=itime1;
        var stime2=itime2;

        if (stime2<=0){
                stime2=stime1;
                displaytimer();}
        showTimer.innerHTML="剩余时间:"+stime2;
        stime2--;
        setTimeout("showtime(stime1,stime2)",60000);
       
}
</script>

代码是一个一分钟计时器,语句中有2个变量:stime1、stime2。
如果使用了var 定义这两个变量,这IE报错,说stime1没有定义。

如果除掉 var ,写成如下:
        stime1=itime1;
        stime2=itime2;

则,程序运行完全正常。
我知道问题出在递归语句:setTimeout("showtime(stime1,stime2)",60000) 这里,但是,不理解为什么。可能对Jscript的参数传递还没有理解。

请各位给个解释,这里多谢!!

[ 本帖最后由 青萍之末 于 2006-11-17 18:19 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-11-17 18:14 |只看该作者
这样试试:setTimeout("showtime("+stime1+","+stime2+")",60000)

论坛徽章:
0
3 [报告]
发表于 2006-11-17 18:27 |只看该作者
把一个语句拆成了几个字符串,确实解决了问题,可以在stime1、stime2前面加上变量定义语句 var 了。
但是,问题更难理解了,正常的递归算法在这里被支解了。

为什么是这这种样子呢?

特别是:用var 语句和不用var 语句,有这样的差别?

Jscript中文手册上,递归一节的一个例子,阶乘:
==================
<html><head>
<script>

//这个是原来的示例函数,其余是我加的--------
function factorial(aNumber)  {

var aNumber = Math.floor(aNumber);  // 如果这个数不是一个整数,则向下舍入。

if (aNumber < 0)  {  // 如果这个数小于 0,拒绝接收。
    return -1;
    }
if (aNumber == 0)  {  // 如果为 0,则其阶乘为 1。
      return 1;
      }
else return (aNumber * factorial(aNumber - 1));  // 否则,递归直至完成。
}


function calculenum(){
document.getElementById("txt1").innerHTML=factorial(20);

}

</script>
</head>
<body onload="calculenum()">
<span id="txt1"></span>
</body></html>

这个例子中也有var 语句定义,运行正常。

[ 本帖最后由 青萍之末 于 2006-11-17 18:47 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-11-20 15:38 |只看该作者
先感谢 tian8970 的解答。

Google了一下,无意中发现,我问了一个有关setTimeout 的经典问题---setTimeout的参数传递问题。

tian8970的解答中,参数传递采用变量的“值”传递,避免了再次进入函数Timer的时候,丢失了变量名stime1,stime2。

这可能是与JS的参数传递方式有关。

有关这个问题,知道怎么解决,但没有弄懂。等有空再来翻一下C的书,看看参数传递问题

至于为什么用和不用var语句,结果不一样,这也是JS的原因。
用var定义的变量,js认为只存在于局部(函数内部),不用var,js认为变量是全局变量。

[ 本帖最后由 青萍之末 于 2006-11-20 15:56 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP