Quello che sta facendo, è riassegnazione undefined
-undefined
dentro che la chiusura. Questo è un failsafe.Perché altro codice può fare accidentalmente qualcosa di simile
undefined = something;
console.log(undefined); // will output 'something'
E questo è valido in javascript (se il motore JS utilizzato non ha attuato le specifiche ECMAScript 5, in ECMAScript 5 spec undefined
è non non-writable
, MDN DOC),
citazione di MDN New_in_JavaScript 1.8.5 (ECMA 5) Pagina
modifiche agli oggetti globali
oggetti globali hanno apportato solo leggere
Il NaN, Infinity, e indefiniti oggetti globali sono stati fatti sola lettura, secondo le specifiche ECMAScript 5.
E da ES5 Annotated Spec
in Guthub
ES5 spec Section
x15.1.1.3
15.1.1.3 indefinito
Il valore undefined è indefinito (vedi 8.1).
Questa proprietà ha gli attributi {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false}.
Anche se global undefined
non è scrivibile Si può avere una variabile locale denominata undefined
e può rovinare il vostro codice (principalmente il confronto con undefined
). Ma questa è la tua responsabilità. Si possono avere i codici come
(function(){
console.log('Second Case: ');
var undefined = 'Something';
console.log(undefined); // Will log `something`
var a ; // a is undefined
console.log(a === undefined); // false, as undefined is changed
// you might expect a === undefined will return true, but as
// `undefined` is changed it will return false.
console.log(a); // undefined
})();
Demo:http://jsfiddle.net/joycse06/V4DKN/
Tuttavia, se undefined
è scrivibile poi l'assegnazione di cui sopra può ostacolare molti comparison
fatti con undefined
dopo quella riga di codice come undefined
non è undefined
più. Ha qualche valore ora.
Così come stanno chiamando quella funzione anonima come
(window) // one argument only
e la ricezione di
(window, undefined) // only window is passed when calling the function
// Second argument is not passed means it's undefined
// so undefined is restored to undefined inside that function
// and no global accidental assignments can hamper jQuery's
// code using 'undefined' now
Ciò significa dentro che la chiusura undefined
viene ripristinato a undefined
, in quanto non è stato passato alcun valore assicurando così uso di undefined
all'interno di quella funzione anonima.
Un ottimo articolo dettagliato su questo http://javascriptweblog.wordpress.com/2010/08/16/understanding-undefined-and-preventing-referenceerrors/
sto citando alcune linee dal link articolo di cui sopra per rendere le cose chiare
Qual è indefinito?
In JavaScript c'è indefinito (tipo), indefinito (valore) e indefinito (variabile).
Non definito (tipo) è un tipo JavaScript incorporato.
undefined (valore) è una primitiva ed è l'unico valore del tipo Non definito.
Qualsiasi proprietà a cui non è stato assegnato un valore, assume il valore non definito. (ECMA 4.3.9 e 4.3.10).
Una funzione senza un'istruzione return o una funzione con un'istruzione return vuota restituisce undefined. Il valore di un argomento di funzione non supportato non è definito.
var a;
typeof a; //"undefined"
window.b;
typeof window.b; //"undefined"
var c = (function() {})();
typeof c; //"undefined"
var d = (function(e) {return e})();
typeof d; //"undefined"
indefinito (variabile) è una proprietà globale il cui valore iniziale non è definito (valore), dalla sua una struttura globale che può anche accedere come variabile. Per coerenza, lo chiamerò sempre una variabile in questo articolo.
typeof undefined; //"undefined"
var f = 2;
f = undefined; //re-assigning to undefined (variable)
typeof f; //"undefined"
Al ECMA 3, il suo valore può essere riassegnata:
undefined = "washing machine"; //assign a string to undefined (variable)
typeof undefined //"string"
f = undefined;
typeof f; //"string"
f; //"washing machine"
Inutile dire, ri-assegnazione di valori alla variabile indefinita è molto cattiva pratica, e infatti la sua non consentito dalla ECMA 5.
correlati: http://stackoverflow.com/q/5020479/ – CMS
correlate: [? Perché window.undefined mutevole in vecchi browser] (https://stackoverflow.com/q/29742135/1048572) – Bergi