Я видел этот синтаксис для создания анонимной функции конструктора в JavaScript:JavaScript Анонимный конструктор Функция:! Function() {}();
var Application = Application || {};
!function(window, Application) {
Application.property = {/*...*/}
Application.method = function(){/*...*/}
}(window, Application);
Я хочу понять, что следующие части здесь:
- Что такое преимущество использования первой линии (т.е.
var o = o || {};
) vs только указываяvar o = (function(){})();
? - Почему
!
используется перед функцией? - Зачем пропускать
window
илиApplication
в качестве параметров, когда они являются глобальными объектами? - Это самый удобный способ для анонимной функции конструктора и как это лучше, чем:
4а)
var Application = {
property: {},
method: function(){}
}
или 4b)
var Application = (function() {
var method = function(){/*...*/}
return {method:method};
}());
он не лучше вашего альтернативного кода. Я бы сказал, что это хуже. – akonsu
Это смешно, но почему? – Vad
2 фрагмента не эквивалентны. '! function() {}()' используется вместо '(function() {})()', см. [этот вопрос] (http://stackoverflow.com/questions/3755606/what-does-the- восклицательный знак-do-before-the-function) для деталей. – Vatev