Multiply
Instructions
The code does not execute properly. Try to figure out why.
function multiply(a, b) { a * b}
Test Cases
Test.assertEquals(multiply(1, 1), 1)Test.assertEquals(multiply(2, 1), 2)Test.assertEquals(multiply(2, 2), 4)Test.assertEquals(multiply(3, 5), 15)
Solution
function multiply(a, b) { return a * b}
Discourse
这一道题可以说是非常的简单啦,考的就是一个函数的返回值。原题中只进行了计算却没有将计算结果返回。
Improvement
回答到上一步基本上就已经解决了这个问题了,但是作为一个经验丰富的工程师,需要做的远不止只是解决问题,还要对各种边际情况进行考虑和兼容。
function multiply(a, b) { if (typeof a !== 'number' || typeof b !== 'number' || !a || !b) { return 0 }
return a * b}
这里我们对变量 a
和 b
的边际情况进行了处理,我们这里判断如果是非法值返回了 0,你当然也可以选择直接抛出一个错误。
Further improvement
const multiply = function multiply(a, b) { if (typeof a !== 'number' || typeof b !== 'number' || !a || !b) { return 0 }
return a * b}
我们甚至可以更进一步,将函数声明更换为函数表达式,因为总所周知,在 JS
中函数声明的形式会导致『变量提升』,将该函数提升至当前函数级作用域的顶部,有时候会导致容易迷惑,使得代码不便于被理解和调试。