2017-01-05 7 views
0

私は最初の関数を繰り返して実行しようとしています。 2番目の関数と同様です。どこを見ますか?この関数を区間内で行う方法

 (function printLetterByLetter() { 
    var i = 0; 
    var destination = "comment"; 
    var RandomComment = [ 
    "Did you choose that outfit?" 
    , "I like trains."]; 
    var message = RandomComment[Math.floor(Math.random() * RandomComment.length)]; 
    var typewriter = function() { 
     document.getElementById(destination).innerHTML += message.charAt(i); 
     i++; 
     if (i > message.length) { 
      clearInterval(typespeed); 
     } 
    } 
    var speed = 60; 
    var typespeed = setInterval(typewriter, speed) 
}()); 



(function printLetterByLetter() { 
    var destination = "comment"; 
    var frequency = 1000; 
    var RandomComment = [ 
     "Did you choose that outfit?" 
     , "I like trains."]; 
    var RandomCommentTimer = setInterval(function() { 
     var message = RandomComment[Math.floor(Math.random() * RandomComment.length)]; 

    }, frequency) 
}()); 

だから、私は何をしようとしていると、その種類のうち設定速度(最初の関数)でランダムなコメントを機能/モジュールを作ることです。設定した時間が経過するとコメントが消え、新しいコメントが入力されます(第2の機能)。そして、2番目の機能と同様に、これは続くでしょう。 これまでのところ私はそれを自分で作ったわけではありませんでしたので、誰かがスタックオーバーフローで私を助けることができるかどうかを見てみましょう。

誰かが見たところにヒントを与えることができれば、それも大歓迎です。

+0

質問は何ですか? – guest271314

+0

2番目のIIFEは、引数(宛先など)が定義されていないため(呼び出しで値を割り当てないため)、IIFEの本体内に同じ名前の変数を宣言するという点で、珍しいことです。第2に、それらは両方とも '#comment'に出力されます - したがって、それらを両方とも(別々の"関数 "または単一のものとして)動作させるとどのように動作すると思いますか? –

+0

2つの関数は本質的に同じですが、唯一の違いは 'RandomComment'配列のメッセージです。どのようにそれらを結合したいですか? – Barmar

答えて

0

関数の外部で関数のパラメータを設定して変更し、内部でそれらにアクセスすることができます。注意するには、設定時にvarを手前に置くことができないということです。 varを手前に置かないと、現在のスコープの外部でアクセスできなくなります。

destination = "comment"; 
frequency = 6000; 
(function printLetterByLetter() { 
//now you have access to destination and frequency as they are defined before the function is called 
var RandomComment = [ 
"Did you choose that outfit?" 
, "I like trains."]; 
var RandomCommentTimer = setInterval(function() { 
    var message = RandomComment[Math.floor(Math.random() * RandomComment.length)]; 
    document.getElementById(destination).innerHTML = message; 
}, frequency) 
}()); 
+0

ありがとうございます、これはよりよく見えます。しかし、これは私が立ち往生している部分ではありません。 –

関連する問題