アプリ版:「スタンプのみでお礼する」機能のリリースについて

javascriptの記述で不明点があります

function javas(){
for (var day = 1; true; day++){
//--何かしらの処理
}
alert(""); //--ここが呼び出せない
}

最後の部分が呼び出せないのですが、もともと呼び出せないものなのでしょうか。

もし呼び出せるとしたらどのように書けばよろしいでしょうか。

よろしくお願いします。

A 回答 (6件)

>alert(""); //--ここが呼び出せない


この行の直前、またはこの行でスクリプトエラーで止まってるんじゃないですか?

質問文や回答のお礼に書いていない部分に、スクリプトエラーがないか確認してみてください。

自分で探せない、または説明できないのであれば、略したり抜粋したりせず全文を書く事をお勧めします。
    • good
    • 0

いずれにしても



>for (var day = 1; true; day++)

の書式はセンスがなさすぎでありえない

daysの型がなにかによりますが、配列やオブジェクトで走査して処理するなら
for(var i in days)やfor(var i=0;i<days.length;i++)的な処理になる

例示がfunction javas(){となっていいるのに
いきなりdaysが現れるのでこれはグローバル変数?
引数として渡した方がよいのでは?
    • good
    • 0

んー?そうではなくって


その取得しますって言っている対象はなんなの?ってこと

配列なの?

for ( var day = 1; true; day ++ ) {

これで上限の指定なく動かしてて、
言っているループ中で
データが取れない(存在しない)ってどうやって判断してるの?ってこと

例えば相手がdataっていう名前の配列なら


for ( var day = 1; true; day ++ ) {
if ( data.length > i ) break;

これでiがdataの配列の数より大きくなったらbreakするんだけど。

forの回数を取得・・・回数のためだけに別処理って、どういう動きを想定してる?

一応breakやったんですがってどうやって書いたの?

補足にある
if(!days){break;}

だとしたら、daysがfalseのときだけどdaysがfalseになったの?

たぶん、なんか回数を取得する処理が無駄っていうより何か間違っている気がする。

とりあえず
if ( day > 100 ) break;

これで試してみてbreakしてforを抜けるならbreakの条件が間違えているよ。

if ( day > 100 )なら確実に抜けるから。
    • good
    • 0

その、登録データ分ってどうやって持ってるの?



その上限でforの回数を決めるか、breakすれば良いと思うんだけど。

この回答への補足

回答ありがとうございます。

登録データ文は
for (var day = 1; true; day++)
で回数分処理できます。
あとは処理の中でデータが取れない(データが存在しない場合)にはループが中断する仕組みになっています。
つまり取得できなくなった=データ上限になります。
forの回数を取得することもできますが
回数の為だけに別処理をするのは無駄のような気がします。

一応breakでやったんですが同じようになり末尾は呼び出されませんでした。

もう一度考え直してみようかと思います。

補足日時:2014/09/22 18:01
    • good
    • 0

forで上限値を指定しないならwhileで十分ですね



どうしても今の書式で下流にながしたいなら
適当なフラグでbreakしてやればいいでしょう

<script>
function javas(){
for (var day = 1; true; day++){
document.write(day+"<br>");
if (day >=10) break;
}
alert("end");
}
javas();
</script>

でもこんなくだらないことするなら
<script>
function javas(){
for (var day = 1; day<=10; day++){
document.write(day+"<br>");
}
alert("end");
}
javas();
</script>

で十分ですよね?

この回答への補足

回答ありがとうございます。

やりたいことと現在の大まかな形になります。

function javas(){
for (var day = 1; true; day++){
//day=1の各セルの値を取得
days //日付
alert(day);
<if(!days){break;}>
}
alert("ここには来ない");
OtherFunction(); //--他の関数の呼び出し
}

この書き方の場合30日文のデータが登録されていればforは30回
31日分の場合は31回繰り返します。
この処理が終わった後に他の関数を呼び出したいのですが末尾の部分だけ呼ばれず処理が終わってしまいます。もちろん、エラーは怒らず他の部分は正常に処理終了します。


<>の部分のようにbreakを用意しても末尾は呼ばれませんでした。
※daysはループ回数取得するもので日付を指定しているので日付分取得します。

登録データ文で処理するのでfor回数は指定しません。

長々と失礼しましたが、この場合の解決方法などご指摘お願いします。
よろしくお願いします。

補足日時:2014/09/22 15:57
    • good
    • 0

動作検証してます?


ブラウザで動作させたら、ブラウザ止まりません?

終了条件trueと書いてますがtrueってなんですか?
こうして実行すれば、もっとわかりやすいかと

function javas(){
for (var day = 1; true; day++){
alert("day:"+day);
//--何かしらの処理
}
alert("無限ループじゃね?"); //--ここが呼び出せない
}

この回答への補足

回答ありがとうございます。

いくつか説明・記述不足でした。すみません。

function javas(){
for (var day = 1; true; day++){
//--何かしらの処理
alert("TEST1"); //--ここはループ回数分呼び出せる
}
alert("TEST2"); //--ここは呼び出せない
}

このfor処理は該当文処理するものです。
1回ごとにday=1のデータを取得します。
なのでご指摘いただいたalert("day:"+day);の場合は
31だったりと取得します。
末尾にif(!取得データ){break;}と書くのと同じ動きをします

この関数で処理した内容で呼び出せない部分に別の関数を呼び出そうとしているのですが
その部分まで処理がいかないので詰まっている状況です。

よろしくお願いします。

補足日時:2014/09/22 15:33
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!