O escopo e funções globais do desafio tem um problema.
O agente do usuário é: 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
.
Descreva como reproduzir esse problema e inclua links para capturas de tela, se possível.
Meu 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);
}
Precisamos começar a usar es6 let
e const
. var
declaração de variável é um bug em potencial.
Os recursos do ES6, incluindo let
e const
, serão abordados em detalhes nos novos tópicos do currículo que estão sendo desenvolvidos (veja aqui ). Esses desafios também abordarão os problemas que podem ser causados por escopo / içamento ao usar var
.
Por enquanto, este desafio serve como uma introdução ao escopo e alguns dos problemas a serem observados quando var
é usado, e ainda contém informações úteis, pois os campistas provavelmente encontrarão código de outras fontes (mais antigas) que use var
(por exemplo, código legado, etc) e, portanto, é uma introdução útil aos problemas discutidos.
Pode haver um argumento para remover a linha
Você sempre deve declarar suas variáveis com var.
ou alterando-o com alguma advertência sobre aprender sobre let
e const
mais tarde, mas acho que este desafio é adequado para uma primeira introdução ao tópico.
cc @ FreeCodeCamp / issue-moderators Opiniões?
@BKinahan Bem colocado.
Quando usar e não usar var
nem sempre depende do desenvolvedor individual, mas na maioria das vezes depende da equipe.
Embora eu não tenha encontrado um momento em que var
não pudesse ser substituído por let
ou const
, conversei com um engenheiro da OpenTable, que recentemente refatorou toda a sua base de código para usar ES2015, e ele mencionou que havia um caso em que let
ou const
era a causa de um bug e var
tinha que ser usado, mas ele não conseguia se lembrar dos detalhes exatos de por que isso foi.
Não acho que var
deva ser desencorajado. Melhor explicar como var
funciona e deixar o desenvolvedor escolher quando estiver mais adiante em sua jornada rumo à iluminação.
Existem também algumas estranhezas com let
e const
que se você não estiver ciente disso, pode passar por alguns loops (ver: zona morta temporal ). Isso não desqualifica let
e const
de serem usados, embora seja um incômodo. Significa apenas que grocar algo é tão importante quanto saber algo.
Obrigado pelas contribuições. Ambos são pontos positivos. Eu acho que tudo isso é baseado em opinião. No entanto, eu manteria minha declaração e iria mais longe a ponto de pregar o uso de dados imutáveis e bibliotecas como immutable.js ou mori para evitar mutações inesperadas de dados. ✌️
Comentários muito úteis
@BKinahan Bem colocado.
Quando usar e não usar
var
nem sempre depende do desenvolvedor individual, mas na maioria das vezes depende da equipe.Embora eu não tenha encontrado um momento em que
var
não pudesse ser substituído porlet
ouconst
, conversei com um engenheiro da OpenTable, que recentemente refatorou toda a sua base de código para usar ES2015, e ele mencionou que havia um caso em quelet
ouconst
era a causa de um bug evar
tinha que ser usado, mas ele não conseguia se lembrar dos detalhes exatos de por que isso foi.Não acho que
var
deva ser desencorajado. Melhor explicar comovar
funciona e deixar o desenvolvedor escolher quando estiver mais adiante em sua jornada rumo à iluminação.Existem também algumas estranhezas com
let
econst
que se você não estiver ciente disso, pode passar por alguns loops (ver: zona morta temporal ). Isso não desqualificalet
econst
de serem usados, embora seja um incômodo. Significa apenas que grocar algo é tão importante quanto saber algo.