Freecodecamp: `var` 应该被劝阻。

创建于 2016-08-13  ·  3评论  ·  资料来源: freeCodeCamp/freeCodeCamp

挑战全球范围和功能有问题。
用户代理是: 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 letconstvar变量声明是一个潜在的错误。

discussing

最有用的评论

@BKinahan

何时使用和不使用var并不总是取决于个人开发人员,但大多数时候它取决于团队。

虽然我还没有发现var不能用letconst替换的情况,但我已经与 OpenTable 的一位工程师进行了交谈,该工程师最近重构了他们的整个代码库以使用ES2015,他确实提到有一个案例letconst是导致错误的原因,必须使用var但他不记得具体细节为什么会这样。

我不认为var应该气馁。 最好解释var工作方式,并让开发人员在他们进一步走上启蒙之路时进行选择。

letconst也有一些奇怪之处,如果您不知道它可以通过一些循环(参见:时间死区)。 这不会取消letconst使用资格,即使它很烦人。 这只是意味着摸索一件事与了解一件事一样重要。

所有3条评论

ES6 功能包括letconst将在当前正在开发的新课程主题中详细介绍(请参阅此处)。 这些挑战还将解决使用var时可能由作用域/提升引起的问题。

目前,这个挑战是对范围界定的介绍,以及在使用var时要注意的一些问题,并且仍然包含有用的信息,因为露营者可能会遇到来自其他(旧)来源的代码使用var (例如遗留代码等),因此它是对所讨论问题的有用介绍。

删除该行可能存在争议

你应该总是用 var 声明你的变量。

或者在稍后学习letconst修改一些警告,但我认为这个挑战对于第一次介绍这个主题来说很好。

cc @FreeCodeCamp/issue-moderators 想法?

@BKinahan

何时使用和不使用var并不总是取决于个人开发人员,但大多数时候它取决于团队。

虽然我还没有发现var不能用letconst替换的情况,但我已经与 OpenTable 的一位工程师进行了交谈,该工程师最近重构了他们的整个代码库以使用ES2015,他确实提到有一个案例letconst是导致错误的原因,必须使用var但他不记得具体细节为什么会这样。

我不认为var应该气馁。 最好解释var工作方式,并让开发人员在他们进一步走上启蒙之路时进行选择。

letconst也有一些奇怪之处,如果您不知道它可以通过一些循环(参见:时间死区)。 这不会取消letconst使用资格,即使它很烦人。 这只是意味着摸索一件事与了解一件事一样重要。

感谢您的投入。 他们都是好点。 我想这都是基于意见的。 然而,我会坚持我的说法,我会尽可能地宣扬使用不可变数据,并使用像 immutable.js 或 mori 这样的库来防止意外的数据突变。 ✌️

此页面是否有帮助?
0 / 5 - 0 等级