¿Cómo obtener valor de la variable que se ha optimizado?

Algunas variables se pueden “optimizar” durante la ejecución de Javascript. Por lo tanto, los valores de tales variables no están disponibles para inspección durante la depuración ( documentación del usuario ). La vista de variables muestra el mensaje (optimizado para distancia) y la consola arroja el siguiente error si se intenta evaluar la variable:

Error: variable has been optimized out 

¿Hay alguna forma de imponer la evaluación de dicha variable o deshabilitar esta optimización en Firefox?

Utilice la variable de una manera que impida esta optimización.

 function NOP() {} // then in the optimised code NOP(myvar); // debugging here should now show `myvar` 

Cuando una variable se ha “optimizado”, simplemente significa que no se está modificando en el contexto del ámbito actual. Por lo tanto, el motor de JavaScript ha hecho algo de magia de optimización y ha ocultado esa variable por el momento. Por ejemplo, digamos que está utilizando lodash para iterar sobre una colección de algún tipo.

 var parentThingy = []; var childThingy = []; _.each (collectionThingy, function(data){ // parentThingy is not being modified inside this callback // so it will be "optimized away" while you are inside this // function scope. var transformed; if (data.someFlag) { transformed = transformDataSomehow(data); } // childThingy is being modified, so you will be able to // see its value in the debugger. if (transformed) { childThingy.push(transformed); } }); // Now that you've exited the callback scope, you will be able to see // the value of parentThingy again. if (childThingy.length > 1){ parentThingy.push(childThingy); } 

Podría usar la sugerencia de NOP para forzar que parentThingy esté visible en el scope de la callback, pero como no está modificando parentThingy dentro de esa callback, no necesita verla. No ha cambiado y no cambiará. No es relevante para el código que está depurando actualmente. Una vez que haya salido del scope de la callback, parentThingy volverá a ser visible para el depurador.

Para tu información: esto no es una cosa de Firefox. Chrome hace lo mismo, solo usa una verborrea diferente para indicar que la variable es irrelevante para el scope actual.

Si necesita depurar esta variable, entonces debe establecer el punto de interrupción en un lugar dentro de la función donde se declara esta variable.

Digamos que necesitas depurar la variable

“valor”

 function(value) { // If you set the breakpoint somewhere here it is OK myArray.map(function() { // If you set the breakpoint here you will get a Error: variable has been optimized out } } 
    Intereting Posts