Более простое решение - поместить весь ваш код в IIFE.
;function() {
// all your code goes here
var x, y, z;
function foo() { ... }
function bar() { ... }
...
}();
Переменные, которые вы объявляете на верхнем уровне IIFE, могут использоваться как глобальные переменные во всех других функциях, но онине станет частью объекта window
.
Единственное предостережение в том, что ни одна из функций, определенных здесь, также не становится глобальными переменными, поэтому вы не можете использовать их в таких вещах, как onclick="foo()"
.Это не должно быть серьезной проблемой, так как в наши дни такое кодирование считается плохим стилем.Но если вы хотите сделать это, вы можете определить функцию следующим образом:
window.foo = function() { ... };
Если вам нужно несколько глобальных имен, вы должны собрать их в один объект и поместить в window
;использование одного объекта позволяет избежать загрязнения глобального пространства имен, что может привести к конфликтам с другими загружаемыми библиотеками (этот подход можно увидеть в таких библиотеках, как jQuery, underscore.js и lodash).
В общем, когдаесли вы хотите создать что-то для именованных элементов, вы должны использовать объект (или ES6 Map
).Хотя любому типу данных могут быть присвоены свойства, это прямое назначение объектов.