Изучая javascript, и я хотел получить обратную связь о функциях самозапуска.Я вызываю функции javascript для очистки переменных в глобальном пространстве имен
Я читал, что создание глобальных переменных - это не путь.
Это оригинальный
// Footer of page
<script>
var lat = 51.505 // retrieved from db
var lon = -0.09 // retrieved from db
var map = L.map('map').setView([51.505, -0.09], 13);
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
L.marker([lat, lon]).addTo(map)
.bindPopup('You are here.')
.openPopup();
</script>
Refactored
// Footer of page
<script>
(function(){
var createMap = function() {
var lat = 51.505 // retrieved from db
var lon = -0.09 // retrieved from db
var map = L.map('map').setView([lat, lon], 13);
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
L.marker([lat, lon]).addTo(map)
.bindPopup('You are here.')
.openPopup();
}(); // createMap function self invocation
})(); // anonymous function self invocation
</script>
Я уверен, если моя переработана версия имеет смысл, так как я создаю функцию var createMap
внутри собственный вызов анонимной функции ,
Я не хочу облаковать глобальное пространство имен моими lat
& lon
переменными, которые извлекаются из базы данных.
UPDATE
Или следующий больше смысла. Самовозбуждение анонимной функции с переменными и кодом внутри. Это не будет мешать или добавлять назначенные переменные в глобальное пространство имен?
// Footer of page
<script>
(function(){
var lat = 51.505 // retrieved from db
var lon = -0.09 // retrieved from db
var map = L.map('map').setView([lat, lon], 13);
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
L.marker([lat, lon]).addTo(map)
.bindPopup('You are here.')
.openPopup();
})(); // anonymous function self invocation
</script>
Я не вижу 'var buildMap' где угодно. Вы имеете в виду 'createMap()'? – slebetman
В настоящее время нет смысла в гнезде другого IIFE. Почему, по-вашему, вам нужна 'createMap'? – Sirko
BTW 'createMap' в настоящее время' undefined', поскольку он не относится к функции, а к возврату этой функции. – Hacketo