挑战全球范围和功能有问题。
用户代理是: 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
使用资格,即使它很烦人。 这只是意味着摸索一件事与了解一件事一样重要。