下面的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
如您所见,我已经尝试在控制台中产生相同的结果。
答案 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));