Estoy intentando comprender por qué una función interna puede acceder a una propiedad pública de una función externa cuando se llama directamente a la función externa, pero no cuando se asigna a una función ¿variable?Diferencia de Javascript entre llamar a una función y crear una instancia de una función
Ejemplo:
function outer(x,y){
this.x = x;
this.y = y;
function inner(){
alert(this.x);
}
inner();
}
outer(1,2); //As expected, alerts 1
var func = outer(1,2) //Also alert 1
var func2 = new outer(1,2); //Alerts undefined
Una cosa que probé era eliminar la palabra clave this
de alert(this.x);
y lo hizo el trabajo para los tres casos. Sin embargo, si eliminé la palabra clave this
, estaría accediendo a la contraseña aprobada en param, no a la variable pública, que definitivamente no es la acción deseada. ¿Alguien puede explicar este comportamiento?
uso Ony 'this' en el interior del cuerpo de la función, si la intención de lo invocan a través de' new', o como un método, o por medio de uno de los '.call()'/'.apply()' /'.bind() 'métodos. Una función que se invoca regularmente a través de 'funcName()' no debería usar 'this'. –
Además, si el programa JavaScript se ejecuta en modo estricto, y una función se invoca a través de 'funcName()', entonces 'this' será' undefined'. Como resultado, el acceso a la propiedad (por ejemplo, 'this.x') arroja un error de referencia. –