Javascript ES6最佳实践,变量实例化

Javascript ES6最佳实践,变量实例化,javascript,angularjs,node.js,reactjs,Javascript,Angularjs,Node.js,Reactjs,我有一个关于我刚读到的最佳实践的问题: 问题是关于变量赋值的 let portfolio = employee.getGithubLink(); if (employee.type === 'manager') { portfolio = employee.getMBAProjects(); } 我这样做是为了只实例化一次投资组合 if (employee.type === 'manager') { let p

我有一个关于我刚读到的最佳实践的问题:

问题是关于变量赋值的

      let portfolio = employee.getGithubLink();

      if (employee.type === 'manager') {
        portfolio = employee.getMBAProjects();
      }
我这样做是为了只实例化一次投资组合

      if (employee.type === 'manager') {
        let portfolio = employee.getMBAProjects();
      } else {
        let portfolio = employee.getGithubLink();
      }
我的问题是:为什么实例化一个变量并覆盖它比用“else”语句实例化一次更好呢

const portfolio = (employee.type === 'manager') ? employee.getMBAProjects() : employee.getGithubLink();

作为一种选择。您不应无正当理由覆盖/变异变量。

首先,如果您使用
let
定义变量,它将仅在定义它的块范围内可用(在
{
}
内)。所以,如果按您的方式执行,变量
投资组合
将是
未定义的
外部条件语句。在这个选项中,您可以使用
var
关键字,它会起作用

if (employee.type === 'manager') {
  var portfolio = employee.getMBAProjects();
} else {
  var portfolio = employee.getGithubLink();
}
但是现在谁在使用
var

Secondary,对于我来说,我认为这种方式对于其他开发人员来说简直是一种困惑。所有样式指南都来自于代码对开发人员(包括您)的可读性和可理解性

了解一个特定变量的一个实例化要容易得多。在上面的例子中,我看到两个实例化(不管只执行一个)。如果您的代码将具有长
或者如果
链呢


第三,如果在条件语句之外实例化变量,那么您需要写得更少,这是好的。

因为按照您的方式,如果
类型
不是“管理者”,那么
组合
变量将不存在,有条件地创建变量通常是个坏主意。如果您尝试在脚本中使用
portfolio
而类型不是manager,会发生什么情况?老实说,我认为这实际上取决于情况以及您将如何使用该变量。但是,拥有/使用可能未定义的变量是一个糟糕的想法。抱歉@Carcigenicate我编辑它时出错了!反问:调用.getGithubLink()的代价有多高?三元运算符可以避免进行两次调用的可能性。或者声明它=null,然后执行if/else赋值。@AlexyHody Ahh。不过,在你的新例子中,我认为这是行不通的。
不让
将范围限制到封闭块吗?忽略这一点,我认为两者之间的任何区别都比任何东西都更主观。如果你知道只有两种选择的话,三元可能是最好的选择。哦,是的三元!谢谢