为了账号安全,请及时绑定邮箱和手机立即绑定

为什么函数里面的setTimeout会导致函数不断执行,不是只执行一次嘛

<!DOCTYPE HTML>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>计时器</title>

</head>

<script type="text/javascript">

  var num=0;

  function startCount() {

    document.getElementById('count').value=num;

    num=num+1;

    setTimeout("startCount()",1000);

  }

  

</script>

<body>

<form>

<input type="text" id="count"/>

<input type="button" value="go" onClick="startCount()"/>

</form>

</body>

</html>

为什么函数里面的setTimeout会导致函数不断执行,不是只执行一次嘛


正在回答

5 回答

我是这么理解的 1.函数被调用,所以开始走函数里面的语句 结果显示0 (此时因为num=0)

                           2.函数里面走到语句setTimeout,意思就是过1s之后再调用startCount()

                           3.然后函数再被调用,又开始走函数里面的语句,结果显示 (num+1)的结果。

然后一直2,3,2,3,2,3,2,3步骤重复


但是我有个问题。。。为什么我没有写onclick,没有任何最初调用函数的语句,他就可以直接开始计数了???

0 回复 有任何疑惑可以回复我~
#1

百兽凯多00 提问者

你怎么写的
2017-02-23 回复 有任何疑惑可以回复我~
#2

慕数据1008917 回复 百兽凯多00 提问者

我就是你这么写,但是我后来把onclick删除了。刷新了一下之后,他就自动开始计数了。。。。。
2017-02-23 回复 有任何疑惑可以回复我~
#3

百兽凯多00 提问者

出bug了吧...没调用应该不会自动吧...
2017-02-23 回复 有任何疑惑可以回复我~
#4

慕数据1008917 回复 百兽凯多00 提问者

我今天又试了试。。好像确实是
2017-02-24 回复 有任何疑惑可以回复我~
查看1条回复

每1s调用自身一次 不停的递归

1 回复 有任何疑惑可以回复我~

因为你的 setTimeout("startCount()",1000);里面调用了startCount(),属于递归调用,因此才不停的被执行。。。

0 回复 有任何疑惑可以回复我~

setTimeout("startCount()",1000);//1000ms后再次调用startCount()

0 回复 有任何疑惑可以回复我~

buzhidao




0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么函数里面的setTimeout会导致函数不断执行,不是只执行一次嘛

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信