2013-03-07 8 views
5

Zastanawiam się, czy funkcja javascript block/function jest zawsze dostępna po załadowaniu. Ponieważ testowałem coś, a teraz jestem nieco zdezorientowany. Zdefiniowałem blok skryptu w div. Blok skryptu ma funkcję obsługi zdarzeń dla elementu do przeładowania div z ajaxem. Wywołanie ajax zwraca zwykły html elementu div i zastępuje go bieżącym. Ale oznacza to zastąpienie skryptu, który również wykonuje wykonanie. Pomyślałem, że skrypt zostanie wycięty z wykonania po instrukcji replace. Ale tak się nie stało. Wykreślono linie kodu po instrukcji replace Jak działa ta funkcja. Jak opisujesz czas życia bloku skryptu?Jak poznać czas życia bloku skryptu lub kodu javascript?

Odpowiedz

8

Po oszacowaniu kodu zawartego w elemencie script wynik tej oceny kodu staje się częścią środowiska wykonawczego strony. Usunięcie elementu script nie powoduje usunięcia powstałych struktur (funkcji itp.) Ze środowiska.

Jeśli skrypt definiuje funkcje lub przechwytuje procedury obsługi zdarzeń do elementów lub tworzy nowe właściwości na istniejących obiektach (w tym obiekt globalny), te funkcje, procedury obsługi i właściwości pozostają w pamięci, nawet jeśli zdefiniowany przez nie script jest usunięty z DOM (podlega zwykłemu wyrzucaniu śmieci JavaScript, np. obiekty, do których nie ma odniesienia, kwalifikują się do GC, ale element script nie ma na to żadnego wpływu). Element script jest jedynie mechanizmem przenoszenia kodu do przeglądarki.

+0

Dziękuję za odpowiedź. Mam jeszcze jedno quastion. Po ponownym załadowaniu div ładowany jest dokładnie ten sam blok skryptu z dokładnie tymi samymi funkcjami. Czy są one dublowane, zastępowane lub ignorowane? –

+1

@HalilIbrahim: Kod zostanie ponownie uruchomiony. Jeśli masz funkcje zadeklarowane w zasięgu globalnym, te, które już istnieją, zostają zastąpione nowymi. Jeśli masz zmienne globalne zadeklarowane * bez * inicjalizatorów (tak, po prostu 'var foo;' not 'var foo = 42;'), ponieważ zmienna jest już zadeklarowana, druga deklaracja jest ignorowana. Jeśli masz inicjatory lub przypisania (tak, 'var foo = 42;' lub po prostu 'foo = 42;'), te są uruchamiane ponownie, więc 'foo' jest ustawione (z powrotem) na' 42'. Itd. Wszystkie efekty uruchomienia kodu pojawiają się po drugim (trzecim, czwartym) czasie. –

+0

@Crowder: Dzięki za odpowiedź. –