JavaScriptのステートメントの考え方

このQ&Aのポイント
  • JavaScriptのステートメントの考え方について質問です。
  • JavaScriptでは行の終わりがステートメントの終わりと解釈されるため、コードの一部が正常に実行されないことがあります。
  • 具体的には、即時関数の直前のステートメントが認識されずにエラーが発生することがあります。
回答を見る
  • ベストアンサー

JavaScriptのステートメントの考え方

JavaScriptのステートメントの考え方で質問です。 JavaScriptでは行の終わりがステートメントの終わりと解釈されるはずなので、 下記の様なコードはOKですよね。 ------------------------------------------------------------------ <script>   j = !1   alert(j); </script> ------------------------------------------------------------------ しかし下記のコードだと「1 is not a function」とfirebugのコンソールで怒られます。 即時関数(function un(){})(); のところで怒られているようです。 ------------------------------------------------------------------ <script> j = !1 (function un(){ var i = 0; })(); alert(j); </script> ------------------------------------------------------------------ コンソールの文言はさておき、j = !1;としたら通ったので、おそらく ステートメントの終わりとして認識されてなかったのだなとおもいます。 un(){}の様に普通の関数にしたら通りました。 即時関数の直前だからダメなのでしょうか? どなたか、ご指南お願いいたします。

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

  • ベストアンサー
  • think49
  • ベストアンサー率59% (285/482)
回答No.2

「1 is not a function」のエラーが発生する原因は、() が後続する場合に関数の引数リストとして解釈されるためです。 つまり、"1()" という関数呼び出しであると扱われています。 http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/7_Lexical_Conventions.html#section-7.9.2 http://jsfiddle.net/5j2Us/

hwbigin
質問者

お礼

なるほど! そういうことなのですね。 即時関数の最後に();を付けることと理屈としては同じなのですね。 有難うございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>JavaScriptでは行の終わりがステートメントの終わりと解釈されるはずなので、 解釈に間違いがあります 「行の終わりと推定される場合は、ステートメントの終わりと拡大解釈される」 というだけで、基本的に終端子がなければ行は続いていると考えるのが プログラムの特性です。 <script> j = a () alert(j); function a(){ return 100; } </script> 行をまたいでカッコがあるなら関数の実行と考えるのが筋でしょう

関連するQ&A

  • JavaScriptの変数について

    JavaScriptのソースで解らないところがあり、困っています。 ソースは下記の様なものなのですが、エラーが出ていません。 解らない点は2点有ります。 1. jにfalseを代入している箇所なのですが、セミコロンがないのは何故なのでしょうか? Chromeのデベロッパツール, FireFoxのFirebugで確かめてみたのですが、エラーとなっておらず、alertでfalseと表示されている状態です。 「j = !1」の箇所を即時関数の外に出すと、エラーとなります。 普通変数に代入する式の末尾はセミコロンをつけると思うのですが、 何故なのでしょうか? 2.また、jはvar j等のように変数の宣言をせずに使えているようなのですが、 普通即時関数内で宣言した変数のスコープは関数の外では使えないので、エラーとなると思うのですが、宣言せずに代入に使った変数はグローバル変数と解釈されるのでしょうか? どなたかお答え下さい。 --------------------------------- <script> (function() { j = !1 })(); alert(j); </script>

  • Javascriptで教えてください

    下記1だと実行できるのですが、2だと実行できないのはなぜでしょうか 1 <script type="text/javascript"> function OnButtonClick() { alert('クリック'); } $(function () { }) </script> 2 <script type="text/javascript"> $(function () { function OnButtonClick() { alert('クリック'); } }) </script>

  • javascript 初心者です

    javascript 初心者です 設定したグローバル変数を引数に指定したいのですが、うまくいきません。 下記のスクリプトのように書いてみたのですが、○が返ってきてしまいます。 どうすればうまくいくでしょうか?よろしくお願いします。 <html> <head> <script type="text/javascript"> <!-- i = false; function myFunc(hensu){ if(hensu){ alert("○"); } else{ alert("×"); } } --> </script> </head> <body> <p onclick="myFunc('i')">[btn]</p> </body> </html>

  • javascriptで、下記のコードをFireFoxで実行した際にd(

    javascriptで、下記のコードをFireFoxで実行した際にd("input")の行でエラーが出てしまいます。 <script language="javascript"> var a=window.alert; alert(a); a("test"); var d=document.createElement; alert(d); d("input"); </script> なぜ、window.alert関数はa変数に代入して実行できるのに、document.createElementはd変数に代入しても実行できないのでしょうか。 d変数をalertすると[native code]とアラートされるので、関数を d に代入出来てはいそうなのですが。 ちなみにFireFox3.5.11で発生した現象です。

  • JavaScriptがFirefoxで動かない・・・

    よろしくお願いいたします。 IEでは正常に動作するのですが、Firefoxで実行してみると ボタンを押しても何の反応もありません。 どのように変更すればFirefoxで動作するのでしょうか? よろしくお願いいたします。 <SCRIPT LANGUAGE="JavaScript"> <!-- function warning(){ alert("テストです。"); } //--> </SCRIPT> <FORM><INPUT type="button" value="ボタンを押して。" onClick="warning()"></FORM> 上記のコードを外部に独立させて・・・ 【コード】 <script type="text/javascript" src="sample3.js"></script> <input type = "button" name = "button3" value = "sample3" onclick = "Func3();"> 【sample3.js】 function Func3() { alert("js外部ファイル記述"); } です。 FC2ブログで活用したいのですが・・・ 改行の扱いは「HTMLタグのみ」に設定しています。 ご回答、よろしくお願いいたします。

  • イベントリスナに登録される function(e){} の "e" はeventオブジェクト?

    私はイベントリスナ登録時の匿名関数に渡す引数eの意味が今まで理解できていませんでした。 最近、下記コードを実行することで、 <script type='text/javascript'> window.addEventListener ('click', function(e){ console.info(e); // 引数をコンソール表示 (要Firebug) for (p in e){ console.info(p + ' = ' + e[p]); // プロパティを列挙 } }, false); </script> 「eventオブジェクトを渡しているらしい」と朧気ながら理解できました。 ただ、疑問点も残ります。 私の理解では、匿名関数は (function(str){ alert(str); })('Hello'); のように明示的に引数を渡さなければ、引き渡された値は undefined となるはずでした。 変数eの値はどこから出現したのでしょうか? そもそも、変数eはeventオブジェクトなのでしょうか?

  • JavaScriptのinnerHTMLの挙動について

    下で"JavaScript内からJavaScriptを書き出したいのですが"で質問したものですが,ソースコードを簡単にして再質問したいと思います. ソースは以下のようにし,divタグのところにinnerHTMLで文字"test"とJavaScriptでアラートを表示させるものです.表示してみたところ,"test"は表示されるのですが,アラートは出てきません. これはinnerHTMLではHTMLのタグは評価されるが,JavaScriptは評価されない,ということなんでしょうか.JavaScriptのこのような仕様は調べにくいので困っています.回答宜しくお願いします. <html><head><title></title> <SCRIPT type="text/javascript"> <!-- var str='<font color="blue">test</font><script type="text/javascript">alert(123);</script>'; function gogo(){ document.all("here").innerHTML = str; } //--> </SCRIPT> </head><body> <div id="here" style="position:absolute;width:600px;left:0px;top:0px;"></div> <SCRIPT type="text/javascript"> <!-- gogo(); //--> </SCRIPT></body></html>

  • 現在のhtmlにjavascriptを記述する際の書き方を教えてくださ

    現在のhtmlにjavascriptを記述する際の書き方を教えてください。 今までは以下のように記述していました。 このように<script>タグで囲む方法は古いらしいのですが・・・ <script type="text/javascript"> <!-- function test{   alert(1); } //--> </script>

    • ベストアンサー
    • HTML
  • Javascriptでalertを大量のループで延々と表示されるのですが、正しい中断方法はありますか?

    Javascriptでalertを大量のループで延々と表示されるのですが、正しい中断方法はありますか? alertがモーダルになっていて、ブラウザの×ボタンが効かないです。 ブラウザはいろいろありますが、主にForeFox3とIE7を使っています。 Javascriptでalertを使わずに同じように表示させて、しかも途中で中断できる関数?ステートメント?ライブラリはありますか?

  • JavaScriptが動きません

    下記のようなJavaScriptを作りましたが、IE8ではボタンを押しても「ようこそJavaScriptへ」が表示されません。 「F12 Web開発者ツール」というのをチョッとイジったのですが、その為ではないかと思います。 どこをどうイジったか覚えてません。 どうすれば動作するようになるでしょうか、教えてください。 動作状況  サーバーに置いてアクセスした場合は、「FireFox」「IE8」とも表示される。  ローカルデスクに置いてアクセスした場合は、「FireFox」では表示される、「IE8」では表示されない。 ☆OSはWindowsXP。 ☆IE8のセキュリティ設定で「アクティブスクリプト」は「有効にする」になってます。 ------JavaScript----------- <HTML> <BODY> <FORM> <P> <INPUT TYPE="submit" VALUE="ここを押すとメッセージが表示されます" ONCLICK="HelloWorld()"> </FORM> </BODY> </HTML> <SCRIPT LANGUAGE="JavaScript"> <!--Hide script from no-JavaScript browsers function HelloWorld() { alert("ようこそJavaScriptへ"); } //--> </SCRIPT>

専門家に質問してみよう