我目前正在研究 codewars kata(将 RGB 数字(0-255)转换为十六进制),并在尝试提高代码的可读性时遇到了一些有趣的事情。我想构造一个全局函数来处理局部变量,但是当我尝试运行代码时,它会在“j”变量(也可能是“i”变量)上引发未定义的错误。下面的代码:
function rgb(r, g, b){
let x
let y
let z
function conversion(){
switch(j) {
case 10:
j = 'A'
break
case 11:
j = 'B'
break
case 12:
j = 'C'
break
case 13:
j = 'D'
break
case 14:
j = 'E'
break
case 15:
j = 'F'
}
switch(i) {
case 10:
i = 'A'
break
case 11:
i = 'B'
break
case 12:
i = 'C'
break
case 13:
i = 'D'
break
case 14:
i = 'E'
break
case 15:
i = 'F'
}
}
if (r <= 0) {
x = '00'
} else if (r >= 255) {
x = 'FF'
} else {
let i = Math.floor(r / 16)
let j = Math.floor(r - i * 16)
conversion()
x = i.toString() + j.toString()
}
if (g <= 0) {
y = '00'
} else if (g >= 255) {
y = 'FF'
} else {
let i = Math.floor(g / 16)
let j = Math.floor(g - i * 16)
conversion()
y = i.toString() + j.toString()
}
if (b <= 0) {
z = '00'
} else if (b >= 255) {
z = 'FF'
} else {
let i = Math.floor(b / 16)
let j = Math.floor(b - i * 16)
conversion()
z = i.toString() + j.toString()
}
return x + y + z
}
如您所见,最好使用“转换”功能,而不是复制粘贴所有代码三次。关于这个话题的任何想法?提前致谢。