loading...

Discussion on: Memoization in a Nutshell

Collapse
asaaki profile image
Christoph Grabo

One fix needed:

if (n == 0 || n == 1) n;

needs to be

if (n === 0 || n === 1) return n;

(also uses === as best practice)

Otherwise an error happens:

RangeError: Maximum call stack size exceeded
Collapse
asaaki profile image
Christoph Grabo

And for the brain version:

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

Or undefined will be the only result.

Collapse
pieohpah profile image
Joe Chasinga Author

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
pieohpah profile image
Joe Chasinga Author

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