comportamiento de elevación cambiado entre cromado 48 y 49?

if (true) { function test() { console.log(true); } } else { function test() { console.log(false); } } test() 

Chrome 48 (y el nodo <5.9.1) registra falso, el logging de Chrome 49 (y Firefox) verdadero. Supongo que se optimizaron al no elevarse desde la twig de falsy, pero eso puede romper las aplicaciones existentes.
¿Cuál es correcto según la especificación?

One Solution collect form web for “comportamiento de elevación cambiado entre cromado 48 y 49?”

De acuerdo con https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function , el estándar ECMAScript es volver a elevar las declaraciones de function en instrucciones de bloque para la creación condicional, que es lo que Chrome 49 parece estar haciendo.

Sin embargo, antes de ECMAScript 6, el comportamiento de declarar funciones en bloques condicionales no estaba definido: los browseres podían usar ese mecanismo de creación condicional, levantar la primera (o última) function que ven (que es lo que Chrome 48 hace), no izar ni function y devuelve un error en la test(); , o incluso hacer algo no relacionado con JavaScript que podría terminar prendiendo fuego a tu computadora.

  • document.getElementById regresa con nulo para un elemento conocido, ¿por qué?
  • Establecer un punto de interrupción en XHR en Chrome
  • Object.create altera la salida de la console del object proto en Chrome?
  • Aviso de service al trabajador en Google Chrome
  • ¿Qué significa el icono de advertencia de color amarillo en el inspector web Chrome?
  • Pop-up blocker API: cómo verificar si el usuario lo tiene habilitado
  • Forzar Chrome para actualizar una página mientras se depura con puntos de interrupción
  • Unkeught TypeError: no se puede leer la propiedad 'className' de undefined
  • Inyectar funciones JS en la página desde un script de Greasemonkey en Chrome
  • Chrome muestra el file JavaScript en lo que parece ser chino
  • ¿Cómo ir a un file específico en las Herramientas de desarrollo de Chrome?
  • connection de cierre websocket automáticamente
  • El manifiesto de extensión debe solicitar permiso para acceder a este host
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.