У меня есть приложение, которое в режиме отладки написано во многих отдельных файлах javascript, но загружается синхронно как часть головного блока страницы. В выпуске я объединять все эти файлы и объединять их. Сегодня я продолжал находить ошибку в мини-версии, поэтому я загрузил один объединенный файл для отладки проблемы и обнаружил, что одна библиотека сама выполняет функцию, и это заставляет выполнять другие функции, определенные в window
.
Я переработал здесь поведение с общим объектом, не имеет значения, если его окно или нет:
<head>
<script>
var a = {}
a.X = function x(){
console.log("shouldn't be executed");
}
(function(a){
console.log("self execution");
}(a));
</script>
</head>
В этом примере я получаю вывод
self execution
shouldn't be executed
Если я изменю вызов
<head>
<script>
var a = {}
function x(){
console.log("shouldn't be executed");
}
a.X = x;
(function(a){
console.log("self execution");
}(a));
</script>
</head>
Тогда я просто получаю
self execution
Это то, что я ожидал. В первом примере, почему X
получает вызов, когда a
передается функции самоисполнения?