Предположим, у меня есть core.js
var ajax = function(){};
var something = function(){super};
var globalconstant = 5;
var someutilitymodule = {
onekey: something;
twokey: something;
}
Если я включу это в свой файл как <script src="core.js">
1) Я загрязняю глобальное пространство имен
2) Можно [заменить/заменить] другой переменной.
Однако разве создание объекта не решит проблему? То есть я делаю core.js вот так
core =
{
ajax : function(){},
something : function(){super},
globalconstant : 5,
someutilitymodule = {
onekey: something;
twokey: something;
}
}
В чем основная проблема этого подхода? Это потому, что вы не можете получить доступ к другим элементам, пока не будет создан полный объект? Например, core = {a:"Foo" , b:a}
не будет работать? Однако я мог бы решить это с помощью
core = {};
core.a="Foo";
core.b=core.a;
Почему мы должны входить в IIFE (выражение немедленно вызываемой функции), если мы действительно не заинтересованы в замыканиях? Для «пространства имен модуля» в Javascript, которое не возражает против того, чтобы все было общедоступным в другом пространстве имен, не будет ли этот подход работать и создавать эффект модуля в Javascript?
Есть ли какие-либо указатели, чтобы прочитать больше об этом? Я знаю, что это немного расплывчато, но я новичок в таких понятиях, как IIFE requirejs и т. Д. Поэтому пытаюсь понять с точки зрения новичка.
core = {a:"Foo" , b:a}
не будет работать, потому чтоcore.b
не предполагает, что текущий корень -core
.core = {a:"Foo" , b: core.a}
будет работать, поэтому аргумент о доступе к другим элементам недействителен. Эта статья Бена Алмана довольно хорошо объясняет IIFE - person Tyblitz   schedule 29.08.2014window
),this.something
относится кwindow.something
, поэтому в этом случае вам понадобитсяthis.core.a
, что в основном совпадает сcore.a
. Вы должны использовать толькоthis
в области действия функции. - person Tyblitz   schedule 29.08.2014core.something
вcore.someutilitymodule
. - person StackSlave   schedule 29.08.2014core = {a:"Foo" , b: core.a}
не работает, потому чтоcore
еще не имеет значения, когда вы пытаетесь получить к нему доступ (b: core.a
). - person Felix Kling   schedule 29.08.2014core = {a: 2, b: function() { return core.a }}
, которая, конечно, выполняется только при вызове функции. Извините и спасибо за указание! - person Tyblitz   schedule 29.08.2014