返回语句中的变量分配是否合法?

时间:2019-07-16 03:50:05

标签: javascript variables return

下面的2个代码块之间是否有区别?

我想知道哪种是最佳做法。像在块2中一样,在return语句中声明一个新变量是否合法?

第1块:

function caseInSwitch(num) {
  let answer = "";
  switch (num) {
    case 1:
      return answer += "alpha";
    case 2:
      return answer += "beta";
    case 3:
      return answer += "gamma";
    case 4:
      return answer += "delta";
  }
}
console.log(caseInSwitch(3)); //output gamma
console.log(answer); //output gamma

第2块:

function caseInSwitch(num) {
  switch (num) {
    case 1:
      return answer = "alpha";
    case 2:
      return answer = "beta";
    case 3:
      return answer = "gamma";
    case 4:
      return answer = "delta";
  }
}
console.log(caseInSwitch(3)); //output gamma
console.log(answer); //output gamma

如您所见,我已经尝试在控制台中产生相同的结果。

3 个答案:

答案 0 :(得分:1)

我认为您可以执行以下操作。没有什么比法律更重要的了。采取最兼容的方式。

function caseInSwitch(num) {
  let answer = "";
  switch (num) {
    case 1:
      answer += "alpha";
      break;
    case 2:
      answer += "beta";
      break;
    case 3:
      answer += "gamma";
      break;
    case 4:
      answer += "delta";
      break;
  }
  return answer;
}

答案 1 :(得分:0)

在块1中,您的代码将两个字符串连接在一起,其中,块2中的代码将值分配给变量。我建议选择第2块,因为第1块不是最佳实践。

答案 2 :(得分:0)

我认为这都不是一个好习惯。

两个选项都使用多个返回路径,该路径仅应为done with caution

第二个选项使用未声明的变量,因此它是全局变量。恶意变量不良做法:Why are global variables considered bad practice?

此外,并非所有路径都返回值,这又是一种不好的做法,如果参数无效,函数应该返回什么?它应该返回一些东西。

Melvins answer几乎是我会做的,但我不会串联字符串。

function caseInSwitch(num) {
  let answer = "";
  switch (num) {
    case 1:
      answer = "alpha";
      break;
    case 2:
      answer = "beta";
      break;
    case 3:
      answer = "gamma";
      break;
    case 4:
      answer = "delta";
      break;
  }
  return answer;
}

console.log("1 " + caseInSwitch(1));
console.log("7 " + caseInSwitch(7))

其他选项可能是删除switch语句并使用数组或关联数组

 function fromArray(num) {
      let answers = ["alpha", "beta", "gamma", "delta"];
      
      return (typeof answers[num-1] === 'undefined') ? "Not Found" : answers[num-1];
    }
    
 function fromAssocArray(num) {
      let answers = {1:"alpha", 2:"beta", 3:"gamma", 4:"delta"};
      
      return answers.hasOwnProperty(num) ?  answers[num] : "N/A";
    }    

    console.log("1 " + fromArray(1));
    console.log("7 " + fromArray(7));
    console.log("---------- Associated Array Below --------------");
    console.log("1 " + fromAssocArray(1));
    console.log("7 " + fromAssocArray(7));