JS сделан таким образом, что вы действительно не можете полностью избегать глобалов.(Ну, вы можете, в некотором роде. Если вы никогда ничего не даете имени. Но это имеет тенденцию вызывать больше проблем, чем решает.) Когда вы вызываете testAlert
из какого-то другого сценария, вы работаете в предположении, что testAlert
является глобальным.Если бы это было не так, вы не могли бы просто вызвать его откуда-либо подобным образом.
Однако вы можете минимизировать вероятность столкновения, добавив свои вещи к объекту, который служит пространством имен, например:
// don't clear it out if it already exists.
// that way all of your scripts can use your namespace, if you want.
// what you're really trying to protect against, are strangers picking names
// like yours.
if (!window.myNamespace) myNamespace = {};
// example function
myNamespace.testAlert = function() { alert("test alert"); };
myNamespace.testAlert();
Таким образом, единственное имя, которое имеет хорошие шансы на конфликт, - это myNamespace
.
Я собирался показать пример глобального пространства имен ... но вы знаете,что?Глобальное пространство имен все еще глобально .Глобальные переменные - это то, от чего вы хотите избавиться в большинстве случаев.