¿Cómo puede ser accesible en otra función de una variable local de la función
-
09-10-2019 - |
Pregunta
var objectTest=
{
test1: function( )
{
val1 = 1;
},
// hows accessing the
test2: function( )
{
alert( val1 );
}
};
objectTest.test2( );
Solución
Al no utilizar el prefijo var
la variable se pone en distinto alcance intento (global) en su lugar:
test1: function() {
var val1=1;
},
Como @Pekka señala, tu ejemplo (arriba) requiere la convocatoria de objectTest.test1();
primero (para crear val1
) de lo contrario obtendrá un error. Si desee para acceder a la variable de ambos lugares, entonces usted debe utilizar en lugar de un objeto-propiedad (como DW @patrick sugiere) que no añade al ámbito mundial
objectTest.test1();
objectTest.test2(); //Shows: Alert-1
alert(val1); //Shows: Alert-1
val1=2;
objectTest.test(2); //Shows: Alert-2
Otros consejos
No se puede. Dos funciones no se pueden ejecutar al mismo tiempo, lo que podrá compartir ámbito local es posible si la forma en que muestras. Usted tendría que definir val1
como miembro del objeto.
Depende de lo que en última instancia quiere hacer. Se podría hacer que sea un miembro del público del objeto:
Ejemplo: http://jsfiddle.net/wqr6W/
var objectTest=
{
val1: 'someDefault',
test1: function( )
{
this.val1 = 1;
},
// hows accessing the
test2: function( )
{
alert( this.val1 );
}
};
objectTest.test1( );
objectTest.test2( );
Por supuesto, esto cambia su código original. Lo que realmente se necesita para hacer dependerá de su circunstancia.
O esto:
Ejemplo: http://jsfiddle.net/wqr6W/1/
var objectTest=
{
val1: 'someDefault',
test1: function( )
{
this.val1 = 1;
},
// hows accessing the
test2: function( )
{
this.test1();
alert( this.val1 );
}
};
objectTest.test2( );
La adición de otra respuesta con el fin de manera más directa a responder la pregunta.
Si en realidad se está hablando de un locales variable a una función, la respuesta simple es que pueda no acceso que a menos que que pase una función de la función que tiene la variable, lo que hace referencia a la variable.
Esto se conoce como la creación de un cierre.
Ejemplo: http://jsfiddle.net/csd3s/
var objectTest=
{
test1: function( )
{
var val1 = 1;
return {getVal:function() {
return val1;
}};
},
// hows accessing the
test2: function( )
{
alert( this.test1().getVal() );
}
};
objectTest.test2( );
Así test2
su interior se puede llamar a la función test1()
, que devuelve un objeto que contiene una función, que hace referencia a la variable local.
Eso (o algo similar) es lo que se necesita hacer referencia a una variable local de otro modo no accesible en una función.