Я ищу создание пространства имен с использованием объектов и самоисполнение анонимных функций. Какой из них считается лучшим вариантом?jQuery namespacing с использованием объектов и самоисполнением анонимных функций
Использование объектов, дает уникальное имя «myAppName», достаточное для предотвращения столкновений?
var myAppName = {
val1: "abc",
val2: "xyz",
myFunc1: function() {
return this.val2;
}
}
console.log(myAppName.val1); // abc
console.log(myAppName.myFunc1()); // xyz
Используя себя выполнение анонимной функции:
(function() {
val1 = "abc";
var val2 = "xyz";
myFunc1 = function() {
return val1;
}
var myFunc2 = function() {
return val2;
}
})();
console.log(val1); // abc
console.log(myFunc1()); // abc
console.log(myFunc2()); // xyz
В приведенном выше коде для самостоятельного выполнения функции, все они, кажется, выполнить. Есть ли смысл использовать и не использовать var перед именами переменных и функций? Я не совсем понимаю. Есть ли способ сделать переменные и функции частными и общедоступными? или все внутри функции самоисследования закрыто?
Что произойдет, если я использую «var» перед выполнением функции self, как показано ниже?
var myAppName = (function() {
val1 = "abc";
var val2 = "xyz";
myFunc1 = function() {
return val1;
}
var myFunc2 = function() {
return val2;
}
})();
В вашем втором кодовом блоке вызов 'console.log (myFunc2());' не будет отображаться 'xyx'. Вместо этого он будет бросать 'ReferenceError: myFunc2 не определен'. Это потому, что 'myFunc2' является локальным для анонимной функции. –
В вашем третьем блоке кода 'myAppName' будет' undefined', потому что вы ничего не возвращаете из функции. –