最近、javasriptを勉強しています。
わからない挙動があったので質問させてください。
htmlファイル内に、
<script type="text/javascript">
f();
function f(){
alert("hoge");
}
</script>
↑これが動いて、
<script type="text/javascript">
f();
</script>
<script type="text/javascript">
function f(){
alert("hoge");
}
</script>
↑これが動かないのはどうしてなのでしょう?
htmlの解析順序?の関係だと思うのですが、
詳しく解説しているページなどがあれば教えてください。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
関数定義 (FunctionDeclaration) は実行コンテキストに入るときに実体化するので順序に依存しません。
http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma26 …
<script type="text/javascript">
f(); // 実行される
hoge(); // TypeError: undefined is not a function
function f () { alert('hoge'); };
var hoge = function () { alert('hoge'); };
</script>
異なるscript要素間の挙動については ECMAScript の範囲を超えているので、HTML 4.01, HTML5 あたりを読む必要があると思います。
HTML 4.01 Specification (ja)
http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401 …
HTML5 (including next generation additions still in development)
http://www.whatwg.org/specs/web-apps/current-wor …
No.2
- 回答日時:
前から順に評価されるからじゃない?
<script type="text/javascript">
window.onload=function(){
f();
}
</script>
<script type="text/javascript">
function f(){
alert("hoge");
}
</script>
こうすれば分かれててもいけると思います
この回答への補足
言葉足らずでした。。
補足させていただきます。
JavaScriptは先頭から順に評価されていくものと思います。
だとすると、
<script type="text/javascript">
f();
function f(){
alert("hoge");
}
</script>
このコードが動く理由がわかりません。
定義よりも前に実行しているのにも関わらず
関数が実行できてしまっています。
そして、なぜこれが動くのに、
下記のコードが動かないのかがわかりません。
f()は not definedになってしまいます。
<script type="text/javascript">
f();
</script>
<script type="text/javascript">
function f(){
alert("hoge");
}
</script>
さしあたってコードが動かなくて困っているというわけではなく、
なぜこれだと動かないのかが知りたくて質問させて頂きました。
このあたりについて、詳しい方、もしくは詳しく解説しているページ
をご存知でしたら教えてください。
よろしくお願いします。
回答ありがとうございます。
onloadはページ読み込み完了後に実行されるので、
動くのは理屈として納得できます。
前から順に評価されていくというのも理解できます。
ただ、その場合、
<script type="text/javascript">
f();
function f(){
alert("hoge");
}
</script>
これがどうして動くのかわからなくなってしまいます。
関数を定義する前に実行しているのに問題なく動いてしまいます。
そして、これが動くのに、どうして<script>要素をまたぐと実行できないのかなぁ。。と思った次第です。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript JAVASCRIPT 2 2022/04/15 15:10
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Java ScriptでIPによるアクセス...
-
Vbscriptで自分自身のウィンド...
-
ASPで取得した情報をscriptタグ...
-
曜日ごとにリンク先を変えるJav...
-
PrintScreenキーを無効にしたい
-
datepickerで日付の値を取得したい
-
ブラウザの「戻る」ボタンを押...
-
javascriptでbgmを自動再生する...
-
Javascriptで、フォームボタン...
-
JavaScriptからVBScriptの呼び...
-
<a href="#" …>の意味を教えて...
-
bodyにidをつける理由は何ですか?
-
SCRIPT5007: 未定義または NULL...
-
base64encodeでの文字化けについて
-
別ファイルのfunctionの読み込み方
-
リンク移動先のURLを取得
-
スマホ上で、左右スワイプで次...
-
HTML内に記載された画像のURLを...
-
javascriptからウィンドウを開...
-
特定のウィンドウ名を持つウィ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javascriptでbgmを自動再生する...
-
JavaScriptからVBScriptの呼び...
-
onbeforeunload時のwindow.open...
-
undefinedが表示されてしまう
-
ASPで取得した情報をscriptタグ...
-
datepickerで日付の値を取得したい
-
ウインドウの後ろに隠れている...
-
Vbscriptで自分自身のウィンド...
-
Java ScriptでIPによるアクセス...
-
「関数が定義されていない」と...
-
javascriptでtableの該当行を削...
-
Cygwinでログをのこす方法
-
確認ダイアログで「キャンセル...
-
showModalDialogで開いた画面か...
-
location.reload() について
-
<aタグで変数に文字を代入
-
iPhone Safariの戻るボタンの挙動
-
毎回、ページ読み込み時に1回...
-
<![CDATA[の意味がわからない
-
JavaScript関数呼出し元の要素...
おすすめ情報