function showMultiples(num, numMultiples){
for(i=1; i<=numMultiples; i++){
var multiple = num + " x " + i + " = " + num * i;
}
return multiple;
}
console.log('showMultiples(2,8) returns: ' + showMultiples(2,8));
对于这段代码,函数应该做的是,通过查看num和numMultiples变量,它应该给出两个数字可能的乘法列表。因此控制台应该打印出来 2x1 = 2 2x2 = 4 2x3 = 6 2x4 = 8 2x5 = 10 2x6 = 12 2x7 = 14 2x8 = 16
但是,这段代码打印出2x8 = 16的任何猜测为什么?
答案 0 :(得分:0)
您已将值分配给multiple
,然后在循环结束时将其返回,这意味着多个将为2x8
。如果您在console.log(multiple)
下面var multiple = num + " x " + i + " = " + num * i;
,则会看到它正确打印出来。
编辑:
function showMultiples(num, numMultiples){
var result = [];
for(i=1; i<=numMultiples; i++){
result.push(num + " x " + i + " = " + num * i);
}
return result.join(' ');
}
将结果添加到array
,当function
完成时,join
array
内的值并返回结果。
答案 1 :(得分:0)
您只有一个print语句,这是在循环之外。如果要多次打印,则需要将print语句放在循环中,如下所示:
function showMultiples(num, numMultiples) {
console.log(`showMultiples(${num}, ${numMultiples}) returns:`);
Array.from({length: numMultiples}, (v, k) => k + 1).
forEach(i => console.log(`${num}×${i} = ${num * i}`));
}
showMultiples(2, 8)
// showMultiples(2, 8) returns:
// 2×1 = 2
// 2×2 = 4
// 2×3 = 6
// 2×4 = 8
// 2×5 = 10
// 2×6 = 12
// 2×7 = 14
// 2×8 = 16
然而,这是糟糕的设计。您不应该混合数据转换和I / O.将两者分开并首先完全构建数据要好得多,然后打印它:
function showMultiples(num, numMultiples) {
return Array.from({length: numMultiples}, (v, k) => k + 1).
map(i => `${num}×${i} = ${num * i}`).
join(", ");
}
console.log(`showMultiples(2, 8) returns: ${showMultiples(2, 8)}`);
// showMultiples(2, 8) returns: 2×1 = 2, 2×2 = 4, 2×3 = 6, 2×4 = 8, 2×5 = 10, 2×6 = 12, 2×7 = 14, 2×8 = 16
这是更惯用的ECMAScript。