Challenge Global Scope and Functions tiene un problema.
El agente de usuario es: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
.
Describa cómo reproducir este problema e incluya vínculos a capturas de pantalla, si es posible.
Mi código:
// Declare your variable here
var myGlobal = 10;
function fun1() {
// Assign 5 to oopsGlobal Here
}
// Only change code above this line
function fun2() {
var output = "";
if (typeof myGlobal != "undefined") {
output += "myGlobal: " + myGlobal;
}
if (typeof oopsGlobal != "undefined") {
output += " oopsGlobal: " + oopsGlobal;
}
console.log(output);
}
Necesitamos comenzar a usar es6 let
y const
. var
declaración de
Las características de ES6, incluidas let
y const
, se cubrirán en detalle en los nuevos temas del plan de estudios que se están desarrollando actualmente (ver aquí ). Estos desafíos también repasarán los problemas que pueden ser causados por el alcance / elevación al usar var
.
Por ahora, este desafío sirve como una introducción al alcance y algunos de los problemas a tener en cuenta cuando se usa var
, y aún contiene información útil, ya que es probable que los campistas encuentren código de otras fuentes (más antiguas) que sí lo hacen. use var
(por ejemplo, código heredado, etc.), por lo que es una introducción útil a los problemas discutidos.
Podría haber un argumento para eliminar la línea
Siempre debes declarar tus variables con var.
o alterarlo con alguna advertencia con respecto a aprender sobre let
y const
más adelante, pero creo que este desafío está bien para una primera introducción al tema.
cc @ FreeCodeCamp / issue-moderators ¿Pensamientos?
@BKinahan Bien dicho.
Cuándo usar y no usar var
no siempre depende del desarrollador individual, pero la mayoría de las veces depende del equipo.
Si bien no encontré un momento en el que var
no pudiera reemplazarse con let
o const
, hablé con un ingeniero de OpenTable, que recientemente había refactorizado todo su código base para usar ES2015, y mencionó que hubo un caso en el que let
o const
fue la causa de un error y se tuvo que usar var
pero no podía recordar los detalles exactos de por qué fue eso.
No creo que var
deba desanimarse. Es mejor explicar la forma en que funciona var
y dejar que el desarrollador elija una vez que estén más avanzados en su viaje hacia la iluminación.
También hay algunas rarezas con let
y const
que, si no lo sabe, puede atravesar algunos bucles (consulte: zona muerta temporal ). Esto no descalifica a let
y const
del uso, aunque es una molestia. Simplemente significa que asimilar algo es tan importante como saberlo.
Gracias por los aportes. Ambos son buenos puntos. Supongo que todo esto se basa en opiniones. Sin embargo, mantendría mi declaración e iría tan lejos como para predicar para usar datos inmutables y usar bibliotecas como immutable.js o mori para evitar mutaciones inesperadas de datos. ✌️
Comentario más útil
@BKinahan Bien dicho.
Cuándo usar y no usar
var
no siempre depende del desarrollador individual, pero la mayoría de las veces depende del equipo.Si bien no encontré un momento en el que
var
no pudiera reemplazarse conlet
oconst
, hablé con un ingeniero de OpenTable, que recientemente había refactorizado todo su código base para usar ES2015, y mencionó que hubo un caso en el quelet
oconst
fue la causa de un error y se tuvo que usarvar
pero no podía recordar los detalles exactos de por qué fue eso.No creo que
var
deba desanimarse. Es mejor explicar la forma en que funcionavar
y dejar que el desarrollador elija una vez que estén más avanzados en su viaje hacia la iluminación.También hay algunas rarezas con
let
yconst
que, si no lo sabe, puede atravesar algunos bucles (consulte: zona muerta temporal ). Esto no descalifica alet
yconst
del uso, aunque es una molestia. Simplemente significa que asimilar algo es tan importante como saberlo.