質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

7067閲覧

function内のfor文を一定間隔で回したい

KensukeTsutsumi

総合スコア15

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2016/05/16 03:53

編集2016/05/16 05:29

下記poseがtrueになった瞬間に1秒処理を一時停止させて、1秒後にposeをfalseに戻して処理を続行させるやり方をご存じの方がいましたら教えて下さい。
もう1つポイントとしては、console.logでtrueの時のjを表示するイメージです。jの値も保持しつつ一時停止させたいなと思っています。
(1秒後にtest関数を実行するのではなく、for文自体を一時停止させて、続きから処理が再開出来るイメージとなります。)
何卒よろしくお願いします。

javaScript

1function test(){ 2var pose = false; 3for(var j =0; j < hoge.length; j ++){ 4 if(条件1){ 5 pose = true; 6 console.log(j); 7 }else{ 8 pose = false; 9 } 10} 11}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

for 文

for 文では次のように書けますが、「pause = true 処理」を割り込ませる手段があるのでしょうか。
for 文は同期処理なので割り込めない気がするのですが…。

JavaScript

1'use strict'; 2var Sample = (function () { 3 function Sample (max) { 4 this.i = 0; 5 this.pause = false; 6 this.max = max; 7 } 8 9 function handleTimeout (thisArg) { 10 thisArg.pause = false; 11 console.log('pause'); 12 thisArg.start(); 13 } 14 15 Object.defineProperty(Sample.prototype, 'start', { 16 writable: true, 17 configurable: true, 18 value: function start () { 19 var i = this.i, max = this.max; 20 21 while (!this.pause && i++ < max) { 22 console.log(i); 23 } 24 25 this.i = i; 26 27 if (i < max) { 28 setTimeout(handleTimeout, 1000, this); 29 } 30 } 31 }); 32 33 return Sample; 34}()) 35 36var sample = new Sample(10000); 37 38setTimeout(function (sample) { 39 sample.pause = true; 40}, 0, sample); 41sample.start(); 42setTimeout(function (sample) { 43 sample.pause = true; 44}, 0, sample);

setTimeout

setTimeout, setInterval のような非同期処理なら簡単に割り込めます。

'use strict'; var Sample = (function () { function Sample (max) { this.i = 0; this.pause = false; this.max = max; } function handleTimeout (thisArg) { thisArg.start(); } function handlePause (thisArg) { thisArg.pause = false; console.log('pause'); thisArg.start(); } Object.defineProperty(Sample.prototype, 'start', { writable: true, configurable: true, value: function start () { if (this.i++ < this.max) { if (!this.pause) { console.log(this.i); setTimeout(handleTimeout, 0, this); } else { setTimeout(handlePause, 1000, this); } } } }); return Sample; }()); var sample = new Sample(10000); sample.start(); setTimeout(function (sample) { sample.pause = true; }, 0, sample);

setTimeout Polyfill

setTimeout の第三引数は IE9- 未対応なので Polyfill を適用してください。

Re: KensukeTsutsumi さん

投稿2016/05/17 03:00

think49

総合スコア18156

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

どうしてもfor文でできなかったので、参考程度に別案。
hogeというのもよくわからなかったので、とりあえず9回繰り返すようにしました。

JavaScript

1function test(){ 2 var j = 0; 3 var pose = false; 4 var func = function(){ 5 pose = false; 6 if(!pose){ 7 pose = true; 8 console.log(j); 9 } 10 j++; 11 } 12 13 func(); //1回めはすぐに始まって欲しいため呼ぶ 14 var timer = setInterval(function(){ 15 func(); 16 if(j >= 9){ 17 //ここの数字が繰り返し回数 18 clearInterval(timer); 19 } 20 },1000); 21}

投稿2016/05/16 11:31

kentei_syunrai

総合スコア946

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問