Eventuali duplicati:
How does the (function() {})() construct work and why do people use it?Perché usare (function() {....}());
Perché i moderni file JavaScript usare costrutti come:
(function() {
// some real code
}());
Vale a dire Capisco che una funzione anonima viene creata e quindi chiamata immediatamente, senza parametri passati ... Ma perché farlo in questo modo e non solo chiamare some real code
? E a cosa serve la coppia esterna di parentesi tonde?
In particolare sto fissando il file js/start.js a 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;
};
}());
Con le mie capacità JavaScript e jQuery base Capisco i singoli comandi elencati sopra, ma non ho ricevuto perché sono avvolti all'interno di diversi function
s. Non possiamo semplicemente chiamare:
"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));
ho visto '((function() {})())', ma non '(function() {}())'. – kevin628
@ kevin628: Non ho mai visto '((function() {})())'. Questo è troppo "()' s. L'altro modo è: '(function() {})()' –
@Rocket Sembra che siano la stessa cosa, almeno in Chrome. Uno ha solo meno '()' s di piegamento della mente. Ho imparato qualcosa di nuovo oggi. – kevin628