-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathfunction_call.js
105 lines (93 loc) · 2.42 KB
/
function_call.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
let noArgCalled;
function noArg() {
noArgCalled = true;
}
console.assertEqual(noArg(), undefined);
console.assert(noArgCalled);
let oneArgCalled;
function oneArg(a) {
oneArgCalled = true;
console.assertEqual(a, 10);
}
console.assertEqual(oneArg(10), undefined);
console.assert(oneArgCalled);
let multiArgCalled;
function multiArg(a, b, c) {
multiArgCalled = true;
console.assertEqual(a, b);
console.assertEqual(a, c);
}
console.assertEqual(multiArg(2 + 2, 2 * 2, 2 ** 2), undefined);
console.assert(multiArgCalled);
let addCalled;
function add(a, b) {
addCalled = true;
return a + b;
}
console.assertEqual(add(10, 20), 30);
console.assert(addCalled);
function earlyReturn(arg) {
if (arg === 42) {
return;
}
if (arg > 50) {
let nice = "nice";
if (arg === 69) {
return nice;
}
}
console.assertNotReached();
}
console.assertEqual(earlyReturn(42), undefined);
console.assertEqual(earlyReturn(69), "nice");
function trailingExpressionIsNotReturned(a, b) {
let sum = a + b;
sum;
}
console.assertEqual(trailingExpressionIsNotReturned(40, 2), undefined);
function actuallyReturnsUndefined() {
return undefined;
}
console.assertEqual(actuallyReturnsUndefined(), undefined);
let n = 10;
function addOutside(delta) {
n += delta;
}
console.assertEqual(n, 10);
addOutside(3);
addOutside(n);
addOutside(4);
console.assertEqual(n, 30);
function moreArgsThanParams(a, b) {
console.assertEqual(a, 1);
console.assertEqual(b, 2);
}
console.assertEqual(moreArgsThanParams(1, 2, 3, 4), undefined);
function moreParamsThanArgs(a, b, c, d) {
console.assertEqual(a, 1);
console.assertEqual(b, 2);
console.assertEqual(c, undefined);
console.assertEqual(d, undefined);
}
console.assertEqual(moreParamsThanArgs(1, 2), undefined);
let paramsEvaluatedCount = 0;
function param(x) {
paramsEvaluatedCount += 1;
return x;
}
function moreArgsThanParams2(a, b) {
console.assertEqual(a, 1);
console.assertEqual(b, 2);
}
moreArgsThanParams2(param(1), param(2), param(3), param(4));
console.assertEqual(paramsEvaluatedCount, 4);
paramsEvaluatedCount = 0;
function moreParamsThanArgs2(a, b, c, d) {
console.assertEqual(a, 1);
console.assertEqual(b, 2);
console.assertEqual(c, undefined);
console.assertEqual(d, undefined);
}
moreParamsThanArgs2(param(1), param(2));
console.assertEqual(paramsEvaluatedCount, 2);
paramsEvaluatedCount = 0;