亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

函數直接調用,為啥不行?

<!DOCTYPE HTML>

<html>

<head>

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

<title>計時器</title>


<script type="text/javascript">

? var num=0;

? function startCount() {

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

? ? num=num+1;

? ? setTimeout(startCount,1000);?

? }

//這里換成setTimeout(startCount,1000); ,可以

startCount();

</script>

</head>

<body>

<form>

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

</form>

</body>

</html>


正在回答

4 回答

那為什么setTimeout(startCount,1000); 就可以,直接調用就不行呢

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

https://img1.sycdn.imooc.com//5b83a6720001974c07530186.jpg

為了測試函數是否執行我把代碼寫成這樣,結果是只能執行一次,而且并沒有成功的獲取到文本框"count"的id。

https://img1.sycdn.imooc.com//5b83a83500010dc602920074.jpg

既然沒有獲取到"count"的id,再看下?document.getElementById('count').value=num;那這句代碼的是不是等同于null.value=null;這樣的用法很明顯是錯誤的,所以函數終止了,并沒有再往下執行。為了驗證我的推論,注釋掉?document.getElementById('count').value=num;

https://img1.sycdn.imooc.com//5b83a81d0001d57807500180.jpg

結果是函數正常執行,只是獲取不到"count"的id值,瀏覽器先顯示https://img1.sycdn.imooc.com//5b83a9340001b58f02250053.jpg

隨后動態顯示https://img1.sycdn.imooc.com//5b83a8960001312104000170.jpg

可以看出只有第2次顯示獲取的id有值。所以我猜測在腳本內部以函數名()方式直接調用函數的話,會獲取不到外部元素的id值,所以你的這段代碼不能動態更新"count"文本框中的值。

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

跟我一起讀_biang

如果這不是正解,希望知道原因的大佬解釋下,我也很好奇。
2018-08-27 回復 有任何疑惑可以回復我~

代碼沒錯? 把js代碼放在html代碼的后面就可以運行

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

昵稱是四聲

這是為什么呢?
2018-08-06 回復 有任何疑惑可以回復我~
#2

ly今夕何夕 回復 昵稱是四聲

跟渲染機制有關系 我百度了一下 大概意思就是:js的下載和執行會阻塞Dom樹的構建(嚴謹地說是中斷了Dom樹的更新),所以script標簽放在首屏范圍內的HTML代碼段里會截斷首屏的內容。 script標簽放在body底部,做與不做async或者defer處理,都不會影響首屏時間,但影響DomContentLoad和load的時間,進而影響依賴他們的代碼的執行的開始時間。 最后就是 如果不在外部引入,而在html里面寫script代碼的話 最好放在body底部 這樣不容易出錯!?。?/div>
2018-08-19 回復 有任何疑惑可以回復我~
#3

昵稱是四聲 回復 ly今夕何夕

謝謝?。?!
2018-09-24 回復 有任何疑惑可以回復我~

在js中函數名可以把它當成指針,函數名加上括號就代表函數立即執行,這里是把startCount函數作為定時器的一個參數傳入,如果加上括號函數立即執行,傳入的參數就變成了函數的返回值,所以不能執行,望采納 謝謝!。

4 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

函數直接調用,為啥不行?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號