Le but est que si une variable a été déclarée mais non affectée, elle peut être affectée directement ; et la portée de la variable ne peut pas être modifiée
Si elle n'est pas déclarée, il suffit de la re-déclarer
.
J'ai cherché sur Internet, une méthode courante est if(typeof(a)=='undefined'){var a='ss';},
Mais cette méthode retournera vrai pour les données non déclarées ou variables non affectées déclarées. Et si oui :
var a; 🎜>function f(){
if(typeof(a)=='undefined')
{var a=1;}
}
f(); a);
affichera undefined car f() déclare uniquement une variable locale du même nom.
Mais s'il s'agit d'une variable déclarée non affectée : if (noValueV==null), elle retournera true
Variable non déclarée : if (noDeclareV==null), une erreur sera signalée ; .
Donc ça fonctionne comme ça :
function f ( ){
if(typeof(v)=='undefined'){
try{
if(v==null)//Indique que v est déclaré mais non attribué
v=1; //Si v est une variable globale, cela ne changera pas sa portée
}
catch(err){//Indique que v n'est pas déclaré
var v;v=2 ;
}
}
console.log(v);
}
f( );
C'est également faux, car js a la fonctionnalité de « déclaration à l'avance », c'est-à-dire les fonctions. Les variables déclarées dans une fonction sont visibles dans cette fonction et ses sous-fonctions, quel que soit l'endroit où elles sont déclarées dans la fonction.
Donc, en raison de la var v; ci-dessus, quelle que soit la situation, seul try est utilisé.
Modifiez-le :
function f( ){
if(typeof(v)=='undefined'){
try{
if(v==null)//Indique que v est déclaré mais non attribué
v=1; / /Si v est une variable globale, cela ne changera pas sa portée
}
catch(err){//Indique que v n'est pas déclaré
eval('var v');v =2; / /C'est différent ici
}
}
console.log(v);
}
f( );
C'est ça.
est écrit comme une fonction de jugement, renvoyer 'noDeclare' signifie que la variable n'a pas été déclarée, 'noValue' signifie que la variable a été déclarée mais n'a pas reçu de valeur, 'hasValue' signifie que la variable a été déclaré et s'est vu attribuer une valeur :
fonction f(v){
if(typeof(v)=='undefined'){
try{
if(v==null)
return 'noValue'
}
catch(err){
return 'noDeclare';
}
}
else return 'hasValue'
}
var a; a));
a=0;
console.log(f(a ));
console.log(f(b));
Faux encore.. . console.log(f(b)); signalera une erreur... ...