Challenge Global Scope and Functions имеет проблему.
Пользовательский агент: 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
.
Опишите, как воспроизвести эту проблему, и, если возможно, добавьте ссылки на снимки экрана.
Мой код:
// 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);
}
Нам нужно начать использовать es6 let
и const
. var
Объявление переменной может привести к ошибке.
Функции ES6, включая let
и const
будут подробно рассмотрены в новых темах учебной программы, которые в настоящее время разрабатываются (см. Здесь ). Эти проблемы также будут касаться проблем, которые могут быть вызваны определением объема / подъемом при использовании var
.
На данный момент эта задача служит введением в область видимости и некоторыми проблемами, на которые следует обратить внимание при использовании var
, и по-прежнему содержит полезную информацию, поскольку участники лагеря, вероятно, столкнутся с кодом из других (более старых) источников, которые используйте var
(например, устаревший код и т. д.), так что это полезное введение в обсуждаемые вопросы.
Может быть аргумент в пользу удаления строки
Вы всегда должны объявлять свои переменные с помощью var.
или изменив его с некоторыми оговорками относительно изучения let
и const
позже, но я думаю, что эта задача подходит для первого введения в тему.
cc @ FreeCodeCamp / issue-moderators Мысли?
@BKinahan Хорошо
Когда использовать и не использовать var
не всегда зависит от отдельного разработчика, но в большинстве случаев это зависит от команды.
Хотя я не нашел случая, когда var
нельзя было заменить на let
или const
я поговорил с инженером из OpenTable, который недавно реорганизовал всю свою кодовую базу для использования ES2015, и он упомянул, что был один случай, когда let
или const
были причиной ошибки, а var
нужно было использовать, но он не мог вспомнить точные детали почему это было.
Я не думаю, что var
следует расстраивать. Лучше объяснить, как работает var
и позволить разработчику сделать выбор, когда он продвинется дальше по пути к просветлению.
Есть также некоторые странности с let
и const
которые, если вы не знаете об этом, могут пройти через вас через некоторые циклы (см .: временная мертвая зона ). Это не лишает права использовать let
и const
, даже если это раздражает. Это просто означает, что разглядывать что-то так же важно, как и знать что-то.
Спасибо за вклад. Оба они хороши. Я полагаю, это все основано на мнении. Тем не менее, я бы поддержал свое утверждение, и я бы пошел дальше, чтобы проповедовать использовать неизменяемые данные и использовать библиотеки, такие как immutable.js или mori, для предотвращения неожиданных мутаций данных. ✌️
Самый полезный комментарий
@BKinahan Хорошо
Когда использовать и не использовать
var
не всегда зависит от отдельного разработчика, но в большинстве случаев это зависит от команды.Хотя я не нашел случая, когда
var
нельзя было заменить наlet
илиconst
я поговорил с инженером из OpenTable, который недавно реорганизовал всю свою кодовую базу для использования ES2015, и он упомянул, что был один случай, когдаlet
илиconst
были причиной ошибки, аvar
нужно было использовать, но он не мог вспомнить точные детали почему это было.Я не думаю, что
var
следует расстраивать. Лучше объяснить, как работаетvar
и позволить разработчику сделать выбор, когда он продвинется дальше по пути к просветлению.Есть также некоторые странности с
let
иconst
которые, если вы не знаете об этом, могут пройти через вас через некоторые циклы (см .: временная мертвая зона ). Это не лишает права использоватьlet
иconst
, даже если это раздражает. Это просто означает, что разглядывать что-то так же важно, как и знать что-то.