segun que para kant house harvard filosofos filosofia felicidad data caso cards big aristoteles javascript scope

javascript - para - que es la felicidad filosofia



Cómo resolver Var fuera del alcance dentro de la llamada setTimeout (4)

Como una mejor práctica, trate de no utilizar cadenas como parámetros para setTimeout y setInterval porque eso invocará a eval ... Usar el siguiente formulario también puede hacer que este problema sea más fácil de comprender / depurar:

setInterval(function () { // do stuff // ... // now wait 2 secs then call someFunction setTimeout(someFunction, 2000); }, 10000);

Intento llamar a setTimeout desde dentro de una devolución de llamada setInterval:

function callback() { //assign myVar var myVar = document.getElementById("givenID"); //... //now wait 2 secs then call some code that uses myVAr setTimeout("myVar.innerHTML = ''TEST''", 2000); } setInterval("callback();", 10000);

setInterval funciona como se esperaba, pero la llamada a setTimeout está fallando. Supongo que el problema está relacionado con el hecho de que estoy haciendo referencia a una variable (myVar) que no está dentro del alcance.

¿Cuál es la mejor manera de resolver esto?


Ejecútalo en Firefox y mira Herramientas | Consola de error. si setTimeout falla, puede decirle por qué existe.

Además, intente reemplazar "someFunction();" con "alert(''hi'')" (sin punto y coma) y ver si eso funciona. Si es así, el problema se reduce significativamente.


Este es un candidato perfecto para cierres:

setInterval( function () { var myVar = document.getElementById("givenID"); setTimeout( function() { // myVar is available because the inner closure // gets the outer closures scope myVar.innerHTML = "Junk"; },2000); }, 10000);

Su problema está relacionado con el alcance, y esto funcionaría alrededor de eso.


Tuve un problema similar. El problema era que estaba tratando de llamar a un método desde dentro de sí mismo a través de un setTimeout (). Algo como esto, QUE NO FUNCIONÓ PARA MÍ:

function myObject() { this.egoist = function() { setTimeout( ''this.egoist()'', 200 ); } } myObject001 = new myObject(); myObject001.egoist();

Lo siguiente TAMPOCO FUNCIONÓ:

... setTimeout( egoist, 200 ); ... setTimeout( egoist(), 200 ); ... setTimeout( this.egoist, 200 ); ... setTimeout( this.egoist(), 200 ); ... setTimeout( function() { this.egoist() }, 200 );

La solución fue usar con la declaración () de esta manera:

function myObject() { this.egoist = function() { with (this) { setTimeout( function() { egoist() }, 200 );} } } myObject001 = new myObject(); myObject001.egoist();

Por supuesto, este es un ciclo sin fin, pero el punto que estoy haciendo aquí es diferente.

Espero que esto ayude :)