javascript初心者です。
タイマー作成などで使われる、「フラグ」ですが、よくわかりません。
myButton = 0;
function myCheck(myFlg){
if (myButton==0){
myStart=new Date();
myButton = 1;
document.myForm.myFormButton.value = "Stop!";
myInterval=setInterval("myCheck(1)",1);
}else{
if (myFlg==0){
myButton = 0;
document.myForm.myFormButton.value = "Start";
clearInterval( myInterval );
}
・
・
・
・・・onclick="myCheck(0)">
なぜ、『myButton = 0;』のフラグと『myCheck(myFlg)』のフラグが2つ必要なのでしょうか?1つじゃできないんでしょうか?
と、レベルの低い質問ですが、よろしくお願いいたします。
No.6ベストアンサー
- 回答日時:
function hoge() { alert( 'abc' );}
と
var hoge = function ( ) { alert( 'abc' ); };
は、ほぼ同じとうのは理解した?
function hoge() { alert( 'abc' );}
は、関数 hoge の定義文。
関数 hoge には、{ alert( 'abc' );}のプログラムが代入されている。
このプログラムを実行するには、関数の名前のあとに () をつける。
今回の場合は、
hoge();
定義と実行は違う。
この回答への補足
本当に迅速で明快な回答ありがとうございます。
わかりました。感謝いたします。
馬鹿な質問で本当に申し訳ありません。
で、前出の質問ですが、
『 if(myButton == 0)』のフラグは(『 if( myButton == 1)』になると勝手に思い込んでいる)『if (myFlg==0)』にすり替わっちゃっているのはどのように結び付けたらよいのでしょうか?
よろしくお願いいたします。
No.8
- 回答日時:
myInterval = setInterval( "myCheck(1)", 1 );
これが実行されると、0.001秒後とに myCheck(1)が呼び出されるようになるだけです
myCheck(0);が呼ばれるまで、繰り返したいのかもしれませんが・・・・
つまりどこかで myCheck(0)がよばれると、停止する。
正直なところ、このコードは、なんの参考にもならないと思う。
ちょっと気になるのだが。もしかして
setInterval()とsetTimeout()を混同していないか?
返事が遅くなりまして、申し訳ございませんでした。
たしかに、setInterval()とsetTimeout()を良く理解していなかったようです。違いをしらみつぶしに調べてみます。
お見受けしたところ、いままでいろいろ質問して、いろいろな方からの回答をもらって、お礼として回答者側にまわって恩返しされているとのこと。
大変感銘いたしました。自分もそうできればよいのですが、技術が伴っておりません。
babu_baboo様の域に達したらそうしたいと思っております。
今回の問答集はすべてコピーして大切に保存してまいりたいとおもっております。ほんとうにばかな質問に親切、丁寧にお答えいただきありがとうございました。
ちなみにbabu_baboo様はjavascriptなど関連のHPなどは開設しているんでしょうか?
重ね重ねほんとうにありがとうございました。
No.7
- 回答日時:
var myButton = 0;
var myInterval;
function myCheck( myFlg ) {
if( myButton == 0 ) {
var myStart = new Date();
myButton = 1;
document.forms['myForm'].elements['myFormButton'].value = "Stop!";
myInterval = setInterval( "myCheck(1)", 1 );
} else {
if( myFlg == 0 ) {
myButton = 0;
document.forms['myForm'].elements['myFormButton'].value = "Start";
clearInterval( myInterval );
}
}
}
//上のコードは、変数名をちょっと下のよう変えて考える
//myFlg は、フラッグではなく、モードと考える
//myButton のみが、本来のフラッグと考える
var myBtnFlag = 0;
var myInterval;
function myCheck( myMode ) {
if( myBtnFlag == 0 ) {
var myStart = new Date();
myBtnFlag = 1;
document.forms['myForm'].elements['myFormButton'].value = "Stop!";
myInterval = setInterval( "myCheck(1)", 1 );
} else {
if( myMode == 0 ) {
myBtnFlag = 0;
document.forms['myForm'].elements['myFormButton'].value = "Start";
clearInterval( myInterval );
}
}
}
この回答への補足
たしかに見方を変えれば・・・。納得しました。
『myFlg は、フラッグではなく、モードと考える』というのがミソですね。
さすがに謙遜されていますが、熟達者さんでございます。
質問攻めで、腹が立ったらすいませんが。
onclickして、myCheckがゼロだったら、myModeがゼロ・・・
だったら、タイマーが停止する気がするのですが。
setInterval("myCheck(1)",1);の「1」によってでしょうか?
でも、if(myMode == 0){ で動いているのに、setInterval("myCheck(1)",1);に行くのか??? うーん・・・。
すいません。怒らないでくださいませ。ご教授願いますでしょうか?
No.5
- 回答日時:
function fuga ( ) {
var hoge = function ( ) {
alert( 'abc' );
};
return hoge;
}
//上は下のようにもできます。いきなり下のように書きたかったのだけど
//ワンクッションおいて、変数に代入したほうが、理解しやすいと思ったのが裏目だった?
function fuga ( ) {
return function ( ) {
alert( 'abc' );
};
}
変数には、数値や文字列、関数、オブジェクトなどを代入できます
var hoge = new Object( ); // var hoge = { };
実は、関数もオブジェクトのようなもの。
なので、代入文で関数を定義できます
つまり、
function hoge( ) {
alert( 'abc' );
}
は、
var hoge = function ( ) {
alert( 'abc' );
};
と、ほぼ同じ。
//_________
hoge();
function hoge( ) { alert( 'abc' ); }
//上の2行のプログラムは、エラーにならないけど
//下の2行はエラーになる
//なぜかというと、まだhogeが定義される前に、それを実行しようとしたから
hoge();
var hoge = function ( ) { alert( 'abc' ); };
//「初心者」×2って連呼しなくても・・・
// 俺も、それに近いからね ^^;
この回答への補足
毎度、毎度のご回答ありがとうございます。
ぜんぜんbabu_baboo様は初心者などではありません
ちなみに、蟻地獄にはまってしいました。
hoge();
function hoge() { alert( 'abc' );}
にhoge();をつけるとなんでalertのメッセージボックスが表示されるのかわからなくなってしまいましたです・・・ ばかですみません・・・。
No.4
- 回答日時:
こういうのだったらどう?
// まず、丈夫なプログラムを作ること。
// それには、グローバル変数を極力使わないこと
// つまり、他から影響を受けないようにする
myButton = 0; // これには、 var がないけどグローバル。
//この変数を、関数の中に閉じ込められれば、よい。
//まず下を参照
//'abc'をアラーとする関数
function hoge( ) {
alert( 'abc' );
}
//上の関数そのものを返す関数
function fuga ( ) {
var hoge = function ( ) {
alert( 'abc' );
};
return hoge;
}
//上の関数を、指定した文字列が返えるようにする
function fuga ( str ) {
var hoge = function ( ) {
alert( str );
};
return hoge;
}
//上の関数を、
var hoge = fuga('abc');
// として実行すると、以後'abc'は必要なく、hoge(); と呼び出すだけで
// 変数 str の値は維持される。ということは、その変数が関数の中で
// 生きているということ。これを flag に使えば、グローバル変数を
// 使わなくてすむ。
function fuga ( str ) {
var flag = false;
var hoge = function ( ) {
alert( [ str, flag ] );
flag = ! flag; //flagを反転
};
return hoge;
}
この回答への補足
すいません。
初心者なので、わからないところが・・・
変数に関数を代入する
function fuga ( ) {
var hoge = function ( ) {
alert( 'abc' );
};
return hoge;
}
ところがわからないのですが?
ご教授ねがいますでしょうか?
No.3
- 回答日時:
もし JavaScript を基礎からしっかりと学ぶ必要がある / 学びたいのであれば Shelley Powers 著、武舎広幸・武舎るみ 訳 『初めての JavaScript 第 2 版』 (ISBN: 978-4873114255) という書籍がおすすめです。
趣味で軽く JavaScript の勉強をしたい、というのならソースコードのサンプル集みたいなのがいいかもしれませんが、私はそういうのには詳しくないのでちょっとわかりません。。 まあ趣味程度であればネット上のサンプルをちょこちょこいじってみるのが手間もかからず楽しいかなーと思います。
No.2
- 回答日時:
こういうのだったら、どうでしょう?
1みりびょうでよびだしている意味がわからないので、指定みり秒後にかいじょ。
(たたかれ台に!(Mではありません。^^;)ぜんかくくうはくは、はんかくに!)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title>TEST</title>
<body>
<form action="#">
<p><input type="button" value="start" id="a" onclick="hoge()"></p>
<p><input type="button" value="start" id="b" onclick="fuga()"></p>
</form>
<script type="text/javascript">
function myChecker ( e, time, flag, str_false, str_true ) {
var v_str_false = 'string' === typeof str_false ? str_false: e.value;
var v_str_true = 'string' === typeof str_true ? str_true: e.value;
flag ? _on(): _off();
return function ( ) {
return flag || _on();
};
function _on ( ) {
e.value = v_str_true;
flag = true;
return setTimeout( _off, time );
}
function _off ( ) {
e.value = v_str_false;
return flag = false;
}
}
var hoge = myChecker( document.getElementById('a'), 2000, false, 'Start', '( . Y . )');
var fuga = myChecker( document.getElementById('b'), 5000, false, 'Start', '( . Y . )');
</script>
No.1
- 回答日時:
プログラミングにおける 「フラグ」 というのは、現在の状態を保持する変数などのことをいいます。
質問で提示されているプログラム中において、myButton
という変数は、「タイマーが動いているかどうか」 という状態を保持するための変数 (つまりフラグ) です。
一方で、
myCheck(myFlg)
の myFlg というのは仮引数変数であり、単にメソッドの引数の名前でしかありません。 つまり、これはフラグとはいえないと思います。
ただ jitsjp_spt さんの疑問ももっともで、何故わざわざ myCheck メソッドに引数を渡しているのかよくわかりません。 このコードをどこで見かけられたのかわかりませんが、全体的にあまり良いコードではありませんし、参考にされない方が良いと思います。
この回答への補足
心強い回答ありがとうございます。
相当悩んでしまいました。
javascriptについて、参考になるサイトや書籍などご存知でしたら
おしえていただけると幸いです。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- JavaScript jsで、配列内の文章を改行する際どのようにすればいいですか。 3 2022/07/05 20:40
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Linux バイナリ実行できない "...
-
URLの一部をコピーできるブック...
-
ASP+アクセスでのSQLコメントに...
-
ボタンをクリックすると数が増...
-
Boolean型配列中のTrueの有無を...
-
引数付きコンストラクタでコン...
-
c++プログラム。どこがだめか教...
-
プログラミングのペーパーテス...
-
jQueryのload()を使用して外部...
-
google apps scriptの終了のさせ方
-
C#OpenCv V4にのエラーに関する...
-
idを使わずにonclickで自身の要...
-
JavaScript window.openで開く...
-
Javaで避けるゲームを作ってい...
-
クリックすると上に開くアコー...
-
【JavaScript】数当てゲームを...
-
C#で、ContextMenuStripに動的...
-
HTML:Tableタグに対し、JavaScr...
-
条件分岐(IF文)の簡素化
-
TEXTAREA内の改行位置をinnerHT...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Boolean型配列中のTrueの有無を...
-
【正規表現】【javascript】CR...
-
ASP+アクセスでのSQLコメントに...
-
Linux バイナリ実行できない "...
-
Vb.netのグローバル変数の宣言...
-
ボタンをクリックすると数が増...
-
【Jquery】changeイベント毎にa...
-
正規表現で半角数字1桁のみを全...
-
「オブジェクトが必要です。」...
-
HTTPSのとき":"が"%3A"ではなく...
-
onclick指定関数の引数へローカ...
-
同じ型【ハイフンと数字】だけ...
-
Excel VBA の ChangeFileAccess
-
C# .NET DataGridView の行を追...
-
javascriptで文字挿入でtoggle...
-
ifreamをリロードしたい
-
window.onloadでのfunction
-
static constメンバ変数(配列)...
-
MFCのキャプション変更
-
アンカーリンクをクリックさせ...
おすすめ情報