5

一度ロードすると、JavaScriptのブロック/関数がいつでも利用できるのだろうか。私は何かをテストしましたが、今は少し混乱しています。スクリプトブロックをdivに定義しました。スクリプトブロックには、要素がajaxでdivをリロードするためのイベント処理関数があります。ajax呼び出しは、divのプレーンhtmlを返し、それを現在のものに置き換えます。しかし、それはまた実行を行うスクリプトを置き換えることを意味します。私は、replaceステートメントの後でスクリプトが実行から切り離されるだろうと考えました。しかし、そうではありませんでした。replaceステートメントが実行された後のコード行それで、これがどのように機能するか。スクリプトブロックの寿命をどのように説明しますか?

4

1 に答える 1

8

要素に含まれるコードscriptが評価されると、そのコード評価の結果がページのランタイム環境の一部になります。要素を削除scriptしても、結果の構造(関数など)は環境から削除されません。

したがって、スクリプトが関数を定義するか、イベントハンドラーを要素にフックするか、既存のオブジェクト(グローバルオブジェクトを含む)に新しいプロパティを作成する場合、それらの関数、ハンドラー、およびプロパティは、scriptそれらを定義したものがDOMから削除されてもメモリに残ります(通常のJavaScriptガベージコレクションの対象です。たとえば、どこにも参照されていないオブジェクトはGCの対象になりますが、script要素はそれに関係しません)。このscript要素は、コードをブラウザに伝達するためのメカニズムにすぎません。

于 2013-03-07T09:03:02.637 に答える