DEV Community

Discussion on: Memoization in a Nutshell

Collapse
 
asaaki profile image
Christoph Grabo

One fix needed:

if (n == 0 || n == 1) n;
Enter fullscreen mode Exit fullscreen mode

needs to be

if (n === 0 || n === 1) return n;
Enter fullscreen mode Exit fullscreen mode

(also uses === as best practice)

Otherwise an error happens:

RangeError: Maximum call stack size exceeded
Enter fullscreen mode Exit fullscreen mode
Collapse
 
pancy profile image
Pan Chasinga

Oh, shoot! Thank you. I thought that could implicitly return.

About the === it's very funny because now we don't have to use == again, although it is totally fine for integers like this case.

Collapse
 
asaaki profile image
Christoph Grabo

===: Yeah, I just picked up this habit, as it is usually the safer option, especially when processing external/user input.

return: JS is one of the langs without implicit returns. Nevertheless in the middle of a function we need to be explicit anyway, since more code follows afterwards. If implicit returns were supported you could use an else block to avoid a keyword, but also not worth the effort.

Thread Thread
 
pancy profile image
Pan Chasinga

Yeah I was hoping es6 is closer to functional than this. The only way to get an implicit return from the last expression is a lambda function without brackets (containing a single expression).

let fun = () => 0;
fun()           // will return 0
Collapse
 
asaaki profile image
Christoph Grabo

And for the brain version:

if (brain[n] === undefined) {

Or undefined will be the only result.