Originariamente inviato da whisher
questa però non mi torna ...
beh, è logico che se sei tu a dichiarare la variabile subito prima non serve a niente fare alcuna verifica ... sai già di che tipo è e che valore contiene, o sbaglio?




Originariamente inviato da whisher
ero convinto che si dovesse usare sempre window.
almeno in tutti gli esempi anche in MDC ci mettono window.
non nei miei ... comunque sia sempre il solito discorso, JS è come se fosse sempre eseguito in questo modo
codice:
with(window){
// tutto il JS che vuoi
}
quindi window.this, window.window, window.self, window.window.window ... sono tutti riferimenti al globale window ... ergo aggiungere window davanti a qualsiasi cosa è ridondante e non serve a niente a meno che tu non abbia definito una variabile/funzione con lo stesso nome all'interno di uno scope diverso
codice:
function pippo(callback){
	function setTimeout(delay){
		(self || window || this).setTimeout(callback, delay);
	};
	setTimeout(1000);
};

pippo(function(){
	alert("è passato circa un secondo");
});
solitamente in questo singolo caso si preferisce usare il self (anche this ma è più particolare) giusto perchè è più corto a scriversi

Per concludere, qualora tu abbia paura che altri possano ridefinire window o self, per avere in qualunque parte del codice il riferimento globale puoi fare così
codice:
// pippo sarà === a window.pippo e === a self.pippo o this.pippo
var	pippo = "function(){alert(window.pippo); alert((function(){return this})().pippo)}";
(function(){
	// se ridefinite possono confondere
	var	self = "bye bye",
		window = self;
	
	alert(window.pippo);	// undefined
	alert(self.pippo);	// undefined
	alert(pippo);		// stringa funzione
	eval(pippo)();		// prima undefined poi stringa funzione
})();
caso atipico poichè sul global scope non puoi ridefinire window ... quindi, alla fine, se non hai dichiarato variabili usando nomi globali di funzione o di variabili stesse, scrivere window.quelloCheTiPare o quelloCheTiPare e basta è la stessa identica cosa solo che nel secondo caso è addirittura meglio perchè:

window.quelloCheTiPare cerca la variabile globale window e poi cerca quelloCheTiPare dentro la stessa

mentre

quelloCheTiPare cerca direttamente nella variabile globale, 1 passaggio in meno (appunto perchè è ridondante)

spero sia più chiaro