JavaScript問題, 定義一個函數 function func(){ 函數體
2 回答

米琪卡哇伊
TA貢獻1998條經驗 獲得超6個贊
不會溢出。
原因,這不是一個“死循環”。
12345 | //這才是死循環,函數的調用堆棧會不斷變大。直到溢出。 function func(){ //函數體 func(); } |
12345678 | //但是,加上setTimeout之后,就不是死循環 //因為1秒之后,setTimeout會開啟一個新的函數調用堆棧。跟上一次的不是同一個。因此不會產生調用堆棧不斷變大直到溢出的情況。 function func(){ //函數體 setTimeout( function (){ func(); },1000); } |
流程是這樣的。
步驟1:創建一個調用堆棧,執行func函數,func函數中注冊了一個定時器。func執行上下文銷毀。
步驟2:1秒鐘之后(不能保證一定是1秒鐘,理想情況下是1秒鐘),定時器觸發
步驟3:創建一個新的調用堆棧,執行定時器中注冊的回調函數-- func。重復步驟1.

喵喔喔
TA貢獻1735條經驗 獲得超5個贊
你這樣寫就是個遞歸,你不會在里面給個判斷啊,滿足就不進行
setTimeout函數不是每t時間執行一次,而是t時間后執行一次,僅一次而已
所以你可以這樣
if(true) setTimeot(XXX);
else alert('');
- 2 回答
- 0 關注
- 955 瀏覽
添加回答
舉報
0/150
提交
取消