forked from valterex/deep-js-foundations
-
Notifications
You must be signed in to change notification settings - Fork 0
/
09-closure.js
80 lines (58 loc) · 1.39 KB
/
09-closure.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
// Closure is when a function "remembers" its lexical scope
// even when the function is executed outside that lexical scope
function ask(question) {
return function holdYourQuestion() {
console.log(question);
};
}
var myQuestion = ask("What is a closure?");
myQuestion(); // What is a closure?
// You close over variables, not values
// Preserves access to variables
var teacher = "Kyle";
var myTeacher = function () {
console.log(teacher); // "Suzy"
};
teacher = "Suzy";
myTeacher(); // "Suzy"
/**
*
* Module pattern
*
*/
// Module pattern requires encapsulation
// You can't have a module without closure
var workshop = (function Module(teacher) {
var publicAPI = { ask };
return publicAPI;
// *********************
function ask(question) {
console.log(teacher, question);
}
})("Kyle");
workshop.ask("It's a module, right?");
// 'Kyle' 'It\'s a module, right?'
/**
*
* ES6 modules
*
*/
var teacher = "Kyle";
export default function ask(question) {
console.log(teacher, question);
}
/**
*
* ES6 module syntax
*
*/
var teacher = "Kyle";
export default function ask(question) {
console.log(teacher, question);
}
import ask from "workshop.mjs";
ask("It's a default import, right");
// 'Kyle' 'It\'s a default import, right?'
import * as workshop from "workshop.mjs";
workshop.ask("It's a namespace import, right?");
// 'Kyle' 'It\'s a namespace import, right?'