• ベストアンサー

スクリプトタグ外での関数がなぜ実行されるか

たとえばイベントハンドラーなどで、 onClick="alert('test')" などと書くと思いますが、このalert()は、JavaScriptの関数であるにもかかわらず、なぜスクリプトタグ外に記載されていても動作するのでしょうか。

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

  • ベストアンサー
  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

>>このalert()は、JavaScriptの関数であるにもかかわらず、なぜスクリプトタグ外に記載されていても動作するのでしょうか。 私も、JavaScriptを記述するとき、「なんでこんなのが動作するの?」と疑問に思っていました。 「JavaScriptは、JavaやC++などのオブジェクト指向言語よりも低機能のスクリプト言語」と思っていたのですが、実際には、”伝統的な(古い!)オブジェクト指向プログラミング”よりも進んだ”メタプログラミング”の考え方が入っているようです。 メタプログラミングとは、実行時にプログラムの解釈(コンパイル)をするだけでなく、プログラム自体を生成&解釈&実行するような機能のことを言うようです(もっと違う意味を表すこともあるようですが・・・) なので、JavaScriptのタグ外にある"alert('test')"も、HTML DOMとJavaScript DOMが協力して、この文を実行時に解析し、実行しているってことのようです。 P.S. どうもプログラミング言語の世界では、OOP(オブジェクト指向プログラミング)ってのは、ちょっと古い考え方になっているようです。”まず、何をクラスにすればいいか?それが問題だ!”的な考えの時代があったのですが、現在は、「クラスなんて無くてもいいじゃん!手早く問題を解決できる方法があれば、それを使えば良い」って考え方になっているように思います。 JavaScriptやRubyは、そういう方向で流れているようですし、C#もそういう方向で進化しているといいます。 オブジェクト指向プログラミングよりも新しい概念のメタプログラミングを学ぶ必要があるようです。

fvapfbva
質問者

お礼

メタプログラミングというのが、謎をとく鍵の1つということはわかりましたが、正直その内容や今回との関連はいまいち不明です・・・。ですが、ありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

onclick=" この部分 " は、スクリプトを書く場所です。 <script>この部分</script>も、スクリプトを書く場所です。 スクリプトを書く場所に書いた内容は、すべてスクリプトと見なされます。

fvapfbva
質問者

お礼

イベントハンドラーのあとに書く部分はスクリプトを書く場所であると、これはHTMLの仕様ということですかね、決まっているということですね。ありがとうございます。

すると、全ての回答が全文表示されます。
  • gorusura
  • ベストアンサー率59% (25/42)
回答No.2

それの正体はJavaScriptの関数だからです。 element.onclick = function (event) { alert('test'); }; それから、JavaScript と HTML は互いに協力し合っています。 だから、このようなことができます。

fvapfbva
質問者

お礼

お互いに協力してくれるというのは、なんとなくはわかりますが、もう少し詳細に教えていただくとありがたいですが、まずはありがとうござます。

すると、全ての回答が全文表示されます。

関連するQ&A