Functions part2(Chapter 4 of JavaScript: The Good Parts)
Module
1 var serial_maker = function () {
2 var prefix = '';
3 var seq = 0;
4
5 return {
6 set_prefix: function (p) {
7 prefix = String(p);
8 },
9
10 set_seq: function (s) {
11 seq = s;
12 },
13 gensym: function () {
14 var result = prefix + seq;
15 seq += 1;
16 return result;
17 }
18 };
19 } ();
20
21 var seqer = serial_maker;
22
23 seqer.set_prefix ('Q');
24 seqer.set_seq (1000);
25 var unique = seqer.gensym();
26 alert(unique);
2 var prefix = '';
3 var seq = 0;
4
5 return {
6 set_prefix: function (p) {
7 prefix = String(p);
8 },
9
10 set_seq: function (s) {
11 seq = s;
12 },
13 gensym: function () {
14 var result = prefix + seq;
15 seq += 1;
16 return result;
17 }
18 };
19 } ();
20
21 var seqer = serial_maker;
22
23 seqer.set_prefix ('Q');
24 seqer.set_seq (1000);
25 var unique = seqer.gensym();
26 alert(unique);
Memoization
1 var fibonacci = function ( ) {
2 var memo = [0, 1];
3 var fib = function (n) {
4 var result = memo[n];
5 if (typeof result !== 'number') {
6 result = fib(n - 1) + fib(n - 2);
7 memo[n] = result;
8 }
9 return result;
10 };
11 return fib;
12 }( );
13
14
15 var fibonacci = memoizer([0, 1], function (shell, n) {
16 return shell(n - 1) + shell(n - 2);
17 });
18
19 var factorial = memoizer([1, 1], function (shell, n) {
20 return n * shell(n - 1);
21 });
2 var memo = [0, 1];
3 var fib = function (n) {
4 var result = memo[n];
5 if (typeof result !== 'number') {
6 result = fib(n - 1) + fib(n - 2);
7 memo[n] = result;
8 }
9 return result;
10 };
11 return fib;
12 }( );
13
14
15 var fibonacci = memoizer([0, 1], function (shell, n) {
16 return shell(n - 1) + shell(n - 2);
17 });
18
19 var factorial = memoizer([1, 1], function (shell, n) {
20 return n * shell(n - 1);
21 });