#javascript
#javascript
Вопрос:
в случае, если у меня есть небольшая «платформа» для общественности, как я могу создать свою собственную «рабочую область»? итак, я могу использовать любое имя переменной, которое я хочу?
как я могу это сделать?
Ответ №1:
Используйте анонимную оболочку функции. Любые переменные, которые определены с помощью var
, не будут доступны для кода вне оболочки. Всякий раз, когда вы хотите определить метод или свойство, добавьте их к tobepublic
объекту (который возвращается в конце).
var your_namespace = (function(){
//Your own "workspace"
var tobepublic = {};
//Define any attributes and methods which should be public on tobepublic
tobepulic.helloWorld = function(){
alert("Hi!");
}
return tobepublic;
})();
Публично приведенный выше код выглядит как приведенный ниже код. Однако описанные выше методы также могут иметь доступ к частным методам / переменным, которые нельзя увидеть «снаружи»:
var your_namespace = {
helloWorld: function(){
alert("Hi!");
}
}
Ответ №2:
Создайте локальную область замыкания функции.
Область действия?
Этот код может немного прояснить ситуацию для вас. Прочитайте комментарии.
<script type="text/javascript">
// global scope
function globalFunc(text) {
alert(text);
}
var privateFunc = null;
// function closure scope
(function(){
// closure function
function closureFunc(text) {
// can call global
globalFunc(text);
}
// let's make closure function accessible from global scope
// since privateFunc variable is in global scope
privateFunc = closureFunc;
})();
// call closure function
privateFunc("calling closure function");
// ERROR: this will not work due to function being in closure scope
closureFunc("calling closure function");
</script>
Создание локальной области
Что на самом деле делает эта странная функция в круглых скобках?
Это некоторая функция:
function name(someParameter) { ... }
Заключив его в круглые скобки и добавив некоторые в конце, он сразу же выполняет его:
(function name(someParameter) { ... })("Parameter text value");
Обратите внимание на параметр функции…
Почему библиотеки используют локальную область видимости?
Библиотеки обычно используют локальную область видимости, чтобы не загрязнять и, что более важно, конфликтовать с другими возможными библиотеками. Подумайте о двух библиотеках, которые бы определяли вызываемую функцию getName
. Последний, который определил бы его, просто переопределил бы реализацию первого, что привело бы к сбоям в работе первой библиотеки.
Когда каждая библиотека создает свою собственную область закрытия, они могут создавать любые функции, переменные внутри и использовать их, не опасаясь быть переопределенными. Библиотеки обычно просто предоставляют некоторую небольшую часть в глобальную область, поэтому другие скрипты могут фактически использовать библиотеку.
(function() {
var closureVar = "I'm local";
globalVar = "I'm global";
// or
window.globalVar2 = "I'm global equivalent";
})();
исключение var
или ссылка window
на объект делает функцию или переменную глобальными.