• ベストアンサー

javascript 一回目実行

失礼します現在一回目だけ処理したい内容があり、サンプルコードを探してみたのですが、 処理の流れがわからない状態です汗 ご教授頂けると助かります //即時関数 var trueOnlyFirstTime = (function(){ var b = true; //戻り値として関数を実行する return function(){ if(b){ b = false; return true; } return false; }; })();

質問者が選んだベストアンサー

  • ベストアンサー
  • tracer
  • ベストアンサー率41% (255/621)
回答No.2

説明が少し複雑になるかもしれません。 まず、最初の関数宣言で[ b = true ] が変数として関数内に保存されています。 次に、trueOnlyFirstTime()の実行すると、最初に設定された[ b = true ] によって、条件式が働き、trueが返され、同時に[ b = false ]として関数内変数の値が書き換えられています。 ここで意図的にtrueOnlyFirstTime()を実行しない限り、この関数が2回以上実行されることはありませんが、仮に実行されたと仮定するなら、2回目以降は、書き換えられた[ b = false ]によって条件式の結果としてfalseが返されます。

losloson
質問者

お礼

有難うございます。 説明を頂き処理の流れを把握できました。

その他の回答 (2)

回答No.3

もっと分かりやすいプログラムにしたら良いのでは? <html> <head> <meta http-equiv="Content-Type" content="Text/HTML; charset=Shift_JIS"> </head> <script type="text/javascript"><!-- function OnlyFirstTime( ){ if( typeof FirstTime == "undefined" ){ FirstTime = false; } if( ! FirstTime ){ FirstTime = true; // ここに記述されたプログラムは1度しか実行されません。 document.write('こんにちは'); } } OnlyFirstTime( ); OnlyFirstTime( ); OnlyFirstTime( ); // --></script> </html>

losloson
質問者

お礼

有難うございます。参考にさせて頂きます。

  • tracer
  • ベストアンサー率41% (255/621)
回答No.1

もう少し回答者側の立場になって具体的に質問内容を考えられると、より具体的な回答がつくと思いますよ。 一回とは何に対しての一回でしょうか。通常javaScriptは、ページが表示されたら1回だけ動作します。 また、「処理の流れが分からない」の意味も不明です。どこまでできて、どこからできないか、どこまでは理解していて、どこから理解できないのか、それが分からないと、「全部何もかも分からない」という話になってしまいます。冗談ではなく、そういう方には「パソコンの電源は入ってますか?」から始める必要さえ感じてしまいます。 具体的に何が不明で、実際に何がどのように問題になっているのでしょうか?

losloson
質問者

補足

失礼しました。 この関数が実行された場合どのような処理が行われるかが知りたいです。 二回処理が行われた場合この関数は実行して欲しくなく、サンプルを見ると最初はtrueで2回目はfalseで実行されないのかな?と思ったのですが、 return falseの前にreturn trueがあるので、どういった動きをするかが、掴めなくて、、、 こんな説明ですいません汗

関連するQ&A

  • javascriptの関数につきまして

    javascriptの関数につきまして javascriptの関数につきましての質問です。 Daycheck()関数 function Daycheck(year, mon, day){ maxDayOfMonth = Array( 31,29,31,30,31,30,31,31,30,31,30,31 ); if (year < 1901 || 2200 < year) return false; if( mon < 1 || mon > 12 ) return false; if( day < 1 || day > maxDayOfMonth[mon-1] ) return false; if( mon != 2 ) return true; if( day < 29 ) return true; if( ( year % 4 ) == 0 && ( year % 100 ) != 0 ) return true; if( ( year % 400 ) == 0 ) return true; return false; } というサンプルソースを見たのですが、Daycheck()の中のif( mon != 2 ) return true;とは2月以外が選択されていた場合trueを返す。 つまり、2月は選択できないということでしょうか? プログラミングについて詳しい方がいらっしゃりましたらご指導お願いします。 宜しくお願い致します。

  • 戻り値必要なし

    JavaScript初心者です。 戻り値なしの関数について。return とreturn falseでは何か違うのでしょうか? function test(){ if(flag) return; var num=1+2; } function test2(){ if(flag) return false; var num=1+2; } よろしくお願いします。

  • javascript関数の戻り値でphpの条件分岐

    こんばんは。 またまたプログラミングで詰まってしまいました・・・。 <?php    echo "<script> funcJS(); </script>"; //javascriptの関数。戻り値true/false    if(funcJS()の戻り値がtrueかどうか){       <~phpの処理~>     } ?> のようなプログラムがあったとして、funcJS()の戻り値の値によって、『phpの処理』を行うかどうかを決定したいのですがそのアルゴリズムが思いつきません。 色々と試行錯誤はやってみて、 (1)phpの変数にfuncJS()の戻り値を格納して、if文で条件分岐  $value = "<script> funcJS(); </script>";   しかし、これは$valueに戻り値を入れることができませんでした。 (2)javascript変数に戻り値を格納して、javascript内のif文で条件分岐 <?php    echo "<script> var value=funcJS(); </script>"; //javascriptの関数。戻り値true/false    echo "<script> if(value == 'true'){ </script>";       <~phpの処理~>    echo "<script> } </script>"; ?>  これも"}"がないと怒られてしまいました。 自分で思いつく限りは試してみたのですが、他に方法が思い浮かばず頭を抱えている状態です。 何か良い方法を知っている方、思いついた方、よろしくお願いします。

  • if文について

    次のようなコードがあった場合、常に戻り値は false になってしまうのですが、$xxxが返る時もあるのでしょうか? というか、これはあるサンプルを簡単にしたものなのですが、$xyz==falseが真の時、$xxxが返っています。 どう考えたらいいのでしょうか? function abc(){   if($xyx==false){     return $xxx;   }   return false; }

    • ベストアンサー
    • PHP
  • JavaScriptのreturnについて教えて

    ■Q1 ・JavaScriptで「return」に何も指定しなかった場合、戻り値は何でしょうか? ・「return false」とは意味が異なるでしょうか? ・「return true」と同じ意味? ■Q2 ・「それ以降の処理を中止したい」という意図で使用する場合、「return」も「return false」も同じ結果となるでしょうか? ・違うのは、戻り値だけ? ■Q3 ・「return false」と「returnを記述しない」では何が違うでしょうか? ■Q4 ・「イベントのバブリング」は、「戻り値の有無」とは関係がない話でしょうか? ■Q5 ・「return false」が適用されるのは「onclick」だけ? それとも「イベント全般」? ■Q6 ・イベントが絡まない箇所で、「return false」を使用することはない?

  • 複数関数からの戻り値returnの指定

    いつもお世話になります。 ActionScrip3に関する質問です。 処理1が終わった段階で戻り値をreturnするという処理を 作成したく下記のように作りました。 流れとしては、関数func1の中に複数の処理があると仮定して、その一連の処理を完了させた 時点でevent.complete(処理完了)によりfunc2に移動し、func2から戻り値の値を 指定したいと考えております。 下記の処理を行ってもfunc1の中でreturnを指定していないので「関数は戻り値をかえしません」 というエラーになってしまいますが、下記の処理以外でも結構ですので、 「一定の処理完了後に戻り値(return)を発生」させる手段をご教授いただけないでしょうか? お手数ではありますが、何卒宜しくお願いいたします。 var bln:Boolean; bln = func1(); function func1():Boolean {  // ここに複数の処理があると仮定する  // 終了後イベント  addEventListener(event.COMPLETE, finish);    function finish() {   return false;  } }

    • ベストアンサー
    • Flash
  • C# こういう場合ってどうなるの?

    public void A(bool b) {   if(b ? B() : C())//分かると思いますが、三項演算子   {     //略   } } public bool B() {   return true; } public bool C() {   return false } 上記のAにtrueを渡し実行した場合、 if文の中はどうなるのでしょうか? 引数がtrueならBを実行し、Bの戻り値trueが if文で処理され、if内に入る・・・でよろしいのでしょうか? それとも引数bの評価がそのままifで使われるのでしょうか? 例えばのコードなので、bだろうがBだろうが変わらない・・・みたいな 回答はご遠慮ください。

  • 「引数の書き方」と「メンバ変数とメンバ関数の名前」について、教えてくだ

    「引数の書き方」と「メンバ変数とメンバ関数の名前」について、教えてください。 クラス内のコード抜粋なのですが、下記はどういう意味なのでしょうか? ▼メンバ変数 var $j = true; ▼メンバ関数 function j($p = false){ if($p) $this->j = false; return $this->j; } $this->j(true); 分からないこと ・コードの意味全般 ・($p = false)と書かれている引数の意味 ・メンバ変数とメンバ関数の名前は同じでもよいか? 

    • ベストアンサー
    • PHP
  • 関数から関数を呼び出したときのリターン処理について

    宜しくお願いいたします。 ユーザー定義関数からユーザ定義関数を呼び出す必要があり 以下の様にしてみたところ function chk($value) {    if ($value>0) {       return TRUE;    }    return FALSE; } function test(){    $a = 0;    $b = -1;    $c = 2;    $txt = '';    if (chk($a)) {       $txt .= 'aはhoge<br>';    }    if (chk($b)) {       $txt .= 'dはhoge<br>';    }    if (chk($c)) {       $txt .= 'cはhoge<br>';    }    return $txt; } 最初の chk($a) で処理が終わってしまいます。 この場合 chk() の return が test() をも止めてしまっているのでしょうか? return で調べて見ると 呼び出し元のスクリプトに戻る というような解説だったので test() に戻って処理の続きをしてくれる と思ったのですがうまくいきません。 これを return $txt; まで処理させるにはどのようにしたらよいでしょうか? できれば chk() をTRUE、FALSEの判定に使いたいと思います。 何卒ご教授のほどよろしくおねがいします。

    • ベストアンサー
    • PHP
  • 【JavaScript】二重送信防止

    いつもお世話になっております。 JavaScriptの二重送信防止についてご教授ください。 現在、下記のJavaScriptを組んでいるのですが、うまく二重送信防止が効いていません。 どこか、おかしなコードがありますでしょうか? ちなみに、<html:text>タグ内でonkeypress="JavaScript:toEnter();"を指定…((1))、 <a href>内でonclick="JavaScript:toAdd();"を指定…((2))しているのですが、 テキストボックス内でエンターを押下した時((1))にうまく二重送信防止が効いていません。 宜しくお願い致します。 <script language="JavaScript"> <!-- var flgSubmit = false; function submitCheck() { if ( flgSubmit ) { return false; } else { flgSubmit = true; return true; } } function toEnter(){ if( submitCheck() ) { if(event.keyCode == 13) toAdd(); } } function toAdd() { if( submitCheck() ) { document.AddForm.submit(); } } //--> </script>

専門家に質問してみよう