Como un subproducto de la optimización del código realizada por los navegadores modernos, mientras se depura, no se puede "ver" todas las variables que "objetivamente" están dentro del alcance. Esto es bien conocido y se ha abordado en una pregunta anterior aquí sobre SO . Esta característica, aunque sin duda útil en la producción, me molesta mucho durante el desarrollo, me ralentiza (eso debería ser obvio).
Ahora mi pregunta es, ¿hay alguna forma de desactivar este comportamiento? ¿Puedo editar algún archivo de configuración, o hay un complemento de navegador, o tal vez hay una "versión de compilación especial para desarrolladores" del ejecutable del navegador? Me encanta escribir mi código en la consola de inmediato cuando escribo un código nuevo, por lo que esto realmente me está molestando.
ACTUALIZAR / EDITAR
Aquí hay una solución parcial, crédito a Paul1365972.
Debe iniciar el navegador Chrome desde la línea de comandos, con opciones especiales, como esta:
- Cierra Chrome completamente
- Ejecute Chrome desde la consola con
"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --js-flags="--allow-natives-syntax"
Windows para otros sistemas operativos similares. - Abra la consola del desarrollador y ejecútela
"%GetHeapUsage()"
. Si inició correctamente Chrome con la opción, se registrará un número en la consola; de lo contrario, obtendrá un error de sintaxis.
Con este indicador de línea de comando, puede 'hablar con el motor V8' con comandos que comienzan %
, que son errores de sintaxis en JavaScript simple. Se dio una lista de comandos V8 disponibles de este tipo en la respuesta de Paul .
Hay %NeverOptimizeFunction()
en esa lista, que es algo que se parecía a lo que tendría que llamar y terminar con eso. Desafortunadamente, esa función no hace lo que esperaba, como se demuestra en la siguiente captura de pantalla.
(((El otro enlace de la respuesta de Paul (módulo de nodo v8-natives) no es importante para nosotros aquí en este contexto. Todo lo que hace es envolver las frases de función "%" para que el código no se bloquee) navegadores que no son v8.)))
(((Recuerdo un momento en que esto funcionó (cuando esta optimización aún no se inventó / implementó). No sé cuánto tiempo atrás. ¿Diez años? ¿15 años? Algo así. ¿Cuál fue la última versión de Chrome? cualquiera) y ¿cuál fue la última versión de Firefox (más seguro aquí de que existe) dónde podría hacer? No le dará la recompensa, pero le dará un voto positivo, si lo sabe y lo publica como respuesta .)))
LA SOLUCIÓN
GRACIAS PETR SRNICEK
NUEVA PREGUNTA
Si bien la solución de Petr ayuda mucho, no es perfecta. Esta pregunta se está haciendo demasiado larga, así que publiqué una nueva pregunta sobre cómo se puede mejorar la solución de Petr. (Por supuesto, podría editar esta pregunta aquí, pero eso sería "poco histórico", si sabes a lo que me refiero).
v8-natives
biblioteca simplemente envuelve las% llamadas importantes en el código en una biblioteca simple que debería estar noops
en un navegador o nodo que no se inició en el indicador especial --allow-natives-syntax ..
%NeverOptimizeFunction(foo)
que acabo de llamarlo también para bodyOnload, "solo porque", pensando "bueno, no va a doler". El problema es que foo
NO se desestimula de la manera que esperaba. La variable lorem
es invisible. Digamos que quiero escribir el código que debe entrar en la función foo. En lugar de escribirlo en mi editor de texto, lo escribo en la consola de desarrollo (mientras el depurador está sentado en foo), veo si hace lo que quiero y luego lo copio / pego desde la consola a mi editor de texto. Así es como me encanta trabajar. Y no puedo. Por la optimización. ¿Consíguelo?
--js-flags
(incluidos varios relacionados con TurboFan ), así como con varios comandos nativos de V8 antes de que Paul1365972 publicara su respuesta, pero no pude lograr el comportamiento deseado. Creo que este enfoque podría ser un callejón sin salida. Puede valer la pena agregar una [v8]
etiqueta a esta pregunta. Alguien con un profundo conocimiento del funcionamiento interno de V8 podría aclarar si este es el camino a seguir o quizás señalarle en la dirección correcta.