Возможный дубликат:
Как работает конструктор (function() {})() и почему люди его используют?
Почему в современных файлах JavaScript используются такие конструкции, как:
(function () {
// some real code
}());
т.е. Я понимаю, что анонимная функция создается, а затем вызывается немедленно, без каких-либо параметров... Но зачем это делать так, а не просто вызывать some real code
? И какова внешняя пара круглых скобок для?
В частности, я смотрю на файл js/start.js в Github:
(function() {
"use strict";
wooga.castle.GRID_UNIT = 48;
wooga.castle.IMAGES_BASE_URL = "images/entities/";
(function () {
var style = document.createElement('div').style,
prefix;
var candidates = {
webkit: 'webkitTransform',
moz: 'MozTransform', // 'M' is uppercased
ms: 'msTransform',
o: 'oTransform',
'': 'transform'
};
for (var prefix in candidates) {
var candidate = candidates[prefix];
if ('undefined' !== typeof style[candidate]) {
wooga.castle.prefix = prefix;
wooga.castle.prefixedTransform = candidate;
break;
}
}
}());
// XXX why the 2 wrapped "function"s here? XXX
wooga.castle.isNativeWrapper = function() {
var result = !wooga.castle.capabilities.desktop && !wooga.castle.capabilities.android && (! /Safari/.test(navigator.userAgent));
wooga.castle.isNativeWrapper = function () {
return result;
};
return result;
};
}());
С моими базовыми навыками JavaScript и jQuery я понимаю одиночные команды, перечисленные выше, но я не понимаю, почему они обернуты внутри нескольких function
s. Не можем ли мы просто позвонить:
"use strict";
wooga.castle.GRID_UNIT = 48;
wooga.castle.IMAGES_BASE_URL = "images/entities/";
var style = document.createElement('div').style,
prefix;
var candidates = {
webkit: 'webkitTransform',
moz: 'MozTransform', // 'M' is uppercased
ms: 'msTransform',
o: 'oTransform',
'': 'transform'
};
for (var prefix in candidates) {
var candidate = candidates[prefix];
if ('undefined' !== typeof style[candidate]) {
wooga.castle.prefix = prefix;
wooga.castle.prefixedTransform = candidate;
break;
}
}
wooga.castle.isNativeWrapper = !wooga.castle.capabilities.desktop && !wooga.castle.capabilities.android && (! /Safari/.test(navigator.userAgent));