Извините, название отстой, но я не мог придумать лучшего.Зачем передавать параметры функции анона при создании области обзора
Файл ShadowDOM.js в Polymer делает это:
(function(scope) {
"use strict";
var unsafeUnwrap = scope.unsafeUnwrap;
var wrap = scope.wrap;
var nonEnumDescriptor = {
enumerable: false
};
function nonEnum(obj, prop) {
Object.defineProperty(obj, prop, nonEnumDescriptor);
}
function NodeList() {
this.length = 0;
nonEnum(this, "length");
}
NodeList.prototype = {
item: function(index) {
return this[index];
}
};
nonEnum(NodeList.prototype, "item");
function wrapNodeList(list) {
if (list == null) return list;
var wrapperList = new NodeList();
for (var i = 0, length = list.length; i < length; i++) {
wrapperList[i] = wrap(list[i]);
}
wrapperList.length = length;
return wrapperList;
}
function addWrapNodeListMethod(wrapperConstructor, name) {
wrapperConstructor.prototype[name] = function() {
return wrapNodeList(unsafeUnwrap(this)[name].apply(unsafeUnwrap(this), arguments));
};
}
scope.wrappers.NodeList = NodeList;
scope.addWrapNodeListMethod = addWrapNodeListMethod;
scope.wrapNodeList = wrapNodeList;
})(window.ShadowDOMPolyfill);
Простой вопрос: почему передача параметра window.ShadowDOMPolyfill
?
Да, это анонимная функция, которая выполняется прямо сейчас. Да, все переменные будут оставаться в рамках функции, избегая загрязнения. Да scope
будет таким же, как window.ShadowDOMPolyfill
.
Это образец, который я видел много раз. Я полностью понимаю, почему хорошо не загрязнять глобальную область переменными и т. Д. Но зачем передавать window.ShadowDOMPolyfill в качестве первого параметра? Насколько я знаю, объект Window полностью доступен в функциях ... так что разница между кодом выше и:
(function() {
"use strict";
var scope = window.ShadowDOMPolyfill;
...
})();
...?
мое предположение: личное предпочтение. – Jamiec
Очиститель API. Возможно, крошечный рост производительности. Но функционально говоря, они оба делают то же самое. –
Вау ... Я этого не ожидал. Я серьезно ожидал, что я пропустил некоторые огромные части Javascript, хотя я написал много кода (это было бы не в первый раз!) – Merc