2013-03-07 63 views
5

不知wheter一個JavaScript塊/功能可以永諾一旦加載。因爲我測試了一些東西,現在我有點困惑。我將一個腳本塊定義爲一個div。腳本塊有一個事件處理函數,用於使用ajax重新加載div。 ajax調用返回div的純html,並用當前的html代替。但它意味着要替換執行的腳本。我已經認爲在替換語句之後腳本會被切斷執行。但事實並非如此。替換語句後的代碼行已被執行所以這些東西是如何工作的。你如何描述腳本塊的生命週期?如何知道腳本塊或JavaScript代碼的生命期?

回答

8

當包含在一個script元素的代碼進行評價時,該代碼評價結果變爲頁的運行時環境的一部分。刪除script元素不會從環境中刪除生成的結構(函數等)。因此,如果腳本定義了函數,或者將事件處理程序掛鉤到元素,或者在現有對象(包括全局對象)上創建新屬性,那麼即使定義它們的scriptscript,這些函數,處理程序和屬性仍保留在內存中從DOM刪除(參照一般的JavaScript垃圾收集;例如,對象不引用任何地方有資格GC,但script元素對無軸承)。 script元素僅僅是一種將代碼傳遞給瀏覽器的機制。

+0

謝謝你的答案。我還有一個問題。在重新加載div完全相同的腳本塊與完全相同的功能正在加載。那麼他們是否已被公佈,取代或被忽略? – 2013-03-07 09:20:07

+1

@HalilIbrahim:代碼再次運行。如果您在全局範圍聲明瞭函數,那麼已經在那裏的函數被替換爲新的函數。如果你有全局變量聲明*無*初始化(所以,只是'VAR富;''不無功富= 42;'),因爲該變量已經宣佈,第二個聲明被忽略。如果你有初始化或分配(因此,'無功富= 42;'或'只是FOO = 42;'),這些都是再等等運行'foo'設置(回)'42'。等等。運行代碼的第二(第三,第四)時間的所有影響都會發生。 – 2013-03-07 09:25:53

+0

@Crowder:謝謝你的回答。 – 2013-03-07 09:34:29

相關問題