Mam aplikację, która w trybie debugowania jest zapisana w wielu oddzielnych plikach javascript, ale jest ładowana synchronicznie jako część głównego bloku strony. W wydaniu scalam wszystkie te pliki razem i je minimalizuję. Dzisiaj ciągle znajdowałem błąd w wersji minified, więc załadowałem pojedynczy połączony plik w celu debugowania problemu i odkryłem, że jedna biblioteka sama wykonała funkcję i spowodowała wykonanie innych funkcji zdefiniowanych na window
.Dlaczego funkcje na obiekcie są wykonywane z funkcji wykonywania poleceń?
Mam repo'd zachowanie tutaj z ogólnej obiektu, nie ma znaczenia, czy jego okno czy nie:
<head>
<script>
var a = {}
a.X = function x(){
console.log("shouldn't be executed");
}
(function(a){
console.log("self execution");
}(a));
</script>
</head>
W tym przykładzie, mam wyjście
self execution
shouldn't be executed
Jeśli zmienię wywołanie być
<head>
<script>
var a = {}
function x(){
console.log("shouldn't be executed");
}
a.X = x;
(function(a){
console.log("self execution");
}(a));
</script>
</head>
potem po prostu
self execution
Tego się spodziewałem. W pierwszym przykładzie, dlaczego jest wywoływana, gdy a
jest przekazywana do funkcji self executing?
Jestem zdziwiony, dlaczego takie pytanie spowodowałoby tak wiele awansów w krótkim czasie ... czy to dlatego, że jest otagowane JavaScript i czy zachowanie nie jest od razu oczywiste ...? – Lekensteyn
Dowód na to, że powinieneś wstawiać średniki = D – Esailija
tak, czasami te półrocza mają znaczenie, a my możemy zobaczyć, jak to może się stać, gdy to robią i nie ma ich! lekcja: zawsze używaj semis. – dandavis