2017-07-26 49 views
0

由於函數調用中的條目,腳本必須打印'Hello',然後'Good bye'。但只打印一次。爲什麼? 這裏有什麼問題。帶參數的遞歸方法

PD:現在它不起作用。它如果我評論的遞歸調用線

<html> 
<head> 
</head> 
<body> 
<script type="text/javascript"> 
    function writing(i,first,second) { 
     len=arguments.length; 
     if (i<=len) { 
      current=arguments[i]; 
      c=0; 
      inter=setInterval(function() { 
        if (c>=current.length) { 
         clearInterval(inter); 
        } else { 
         field=document.getElementById('div1'); 
         field.innerHTML+=current[c]; 
         c+=1; 
        } 
       },200); 
     } 
     i<len?writing(i+1,first,second):writing(i=0,first,second);   
    } 
    writing(1,'Hello','Good bye'); 
</script> 
<div id="div1"></div> 
</body> 

+3

聖缺少'var'聲明,蝙蝠俠!省略'var'(或'let'或'const')關鍵字將導致變量在全局範圍(在這種情況下爲'window')聲明 - 導致各種潛在的命名污染和串擾。最好養成使用棉絨的習慣來幫助你捕捉那類東西。 –

+0

好的。我減少了這個問題。現在它會用'Undefined','Hello'或'Goodbye'打印一條隨機信息。不尊重setInterval時間以按角色運行爲什麼? – gAbad

回答

1

有這麼多問題的代碼,第一個是它是無限循環(永不落幕的),第二個是變量聲明,以及其他...

在這裏我附上了代碼片段,請運行並檢查,如果它正在尋找。

我必須添加setTimeout來滿足您的需求。

var interval_counter = 0; 
 

 
function writing(i, first, second) { 
 
    var len = arguments.length; 
 
    if (i != 0 && i <= len) { 
 
     var current = arguments[i]; 
 
     var c = 0; 
 
     setTimeout(function() { 
 
      var inter = setInterval(function() { 
 
       if (c >= current.length) { 
 
        clearInterval(inter); 
 
       } else { 
 

 
        field = document.getElementById('div1'); 
 
        field.innerHTML += current[c]; 
 
        c += 1; 
 
       } 
 
      }, 200); 
 
     }, 200 * interval_counter); 
 
     interval_counter = interval_counter + current.length; 
 
     i < (len - 1) ? writing(i + 1, first, second) : writing(i = 0, first, second); 
 
    } else { 
 
     return false; 
 
    } 
 

 
} 
 
writing(1, 'Hello', 'Good bye');
<div id="div1"></div>

+0

對。謝謝。我真的必須深入研究javascript基礎。 – gAbad