1- function greet ( whatToSay ) {
2- return function ( name ) {
3- console . log ( `${ whatToSay } :${ name } ` )
1+ // function greet(whatToSay) {
2+ // return function(name) {
3+ // console.log(`${whatToSay} : ${name}`);
4+ // };
5+ // }
6+
7+ // greet("Hi")("ashfaq");
8+
9+ // var sayHi = greet("Hi");
10+ // // function have access to lexically scoped variable and function when it is invoked outside of the scope{execution context}
11+
12+ // sayHi("Kranthi");
13+
14+ // function build() {
15+ // var arr = [];
16+ // for (var i = 0; i < 3; i++) {
17+ // arr.push(function() {
18+ // console.log(i);
19+ // });
20+ // }
21+ // return arr;
22+ // }
23+
24+ // var fs = build();
25+
26+ // fs[0](); //3
27+ // fs[1](); //3
28+ // fs[2](); //3
29+
30+ // // solution1 Old school By using IIFE
31+ // function build2() {
32+ // var arr = [];
33+ // for (var i = 0; i < 3; i++) {
34+ // arr.push(
35+ // (function(j) {
36+ // return function() {
37+ // console.log(j);
38+ // };
39+ // })(i)
40+ // );
41+ // }
42+ // return arr;
43+ // }
44+
45+ // var fs2 = build2();
46+
47+ // fs2[0](); //3
48+ // fs2[1](); //3
49+ // fs2[2](); //3
50+
51+ // // ES6 solution By using let
52+
53+ // function build3() {
54+ // var arr = [];
55+ // for (let i = 0; i < 3; i++) {
56+ // arr.push(function() {
57+ // console.log(i);
58+ // });
59+ // }
60+ // return arr;
61+ // }
62+
63+ // var fs3 = build3();
64+
65+ // fs3[0](); //0
66+ // fs3[1](); //1
67+ // fs3[2](); //2
68+
69+ // // KYLE SIMPSON deep javascript //
70+ // // closure is preservation of linkage of variable not value
71+
72+ // var teacher = "kyle";
73+
74+ // var myTeacher = function() {
75+ // console.log(teacher);
76+ // };
77+
78+ // teacher = "Simpson";
79+
80+ // myTeacher();
81+
82+ function test ( ) {
83+ var data = "SDSD" ;
84+ function test1 ( ) {
85+ return ( data = 1 + data ) ;
486}
5- }
6-
7- greet ( 'Hi' ) ( 'ashfaq' ) ;
8-
9- var sayHi = greet ( 'Hi' ) ;
10- // function have access to lexically scoped variable and function when it is invoked outside of the scope{execution context}
11-
12- sayHi ( "Kranthi" ) ;
13-
14-
15-
16-
17- function build ( ) {
18- var arr = [ ] ;
19- for ( var i = 0 ; i < 3 ; i ++ ) {
20- arr . push (
21- function ( ) {
22- console . log ( i )
23- }
24- )
87+ function test2 ( ) {
88+ return ( data = 2 + data ) ;
2589}
26- return arr ;
27- }
28-
29- var fs = build ( ) ;
30-
31- fs [ 0 ] ( ) ; //3
32- fs [ 1 ] ( ) ; //3
33- fs [ 2 ] ( ) ; //3
34-
35-
36- // solution1 Old school By using IIFE
37- function build2 ( ) {
38- var arr = [ ] ;
39- for ( var i = 0 ; i < 3 ; i ++ ) {
40- arr . push (
41- ( function ( j ) {
42- return function ( ) {
43- console . log ( j )
44- }
45- } ( i ) )
46- )
47- }
48- return arr ;
49- }
50-
51- var fs2 = build2 ( ) ;
52-
53- fs2 [ 0 ] ( ) ; //3
54- fs2 [ 1 ] ( ) ; //3
55- fs2 [ 2 ] ( ) ; //3
56-
57-
58- // ES6 solution By using let
59-
60-
61- function build3 ( ) {
62- var arr = [ ] ;
63- for ( let i = 0 ; i < 3 ; i ++ ) {
64- arr . push (
65- function ( ) {
66- console . log ( i )
67- }
68- )
90+ function test3 ( ) {
91+ return ( data = 3 + data ) ;
6992}
70- return arr ;
93+ return {
94+ test1,
95+ test2,
96+ test3
97+ } ;
7198}
72-
73- var fs3 = build3 ( ) ;
74-
75- fs3 [ 0 ] ( ) ; //0
76- fs3 [ 1 ] ( ) ; //1
77- fs3 [ 2 ] ( ) ; //2
78-
79-
80- // KYLE SIMPSON deep javascript //
81- // closure is preservation of linkage of variable not value
82-
83- var teacher = "kyle" ;
84-
85- var myTeacher = function ( ) {
86- console . log ( teacher )
87- }
88-
89- teacher = "Simpson"
90-
91- myTeacher ( )
99+ let z = test ( ) ;
100+ console . log ( z . test1 ( ) , z . test2 ( ) , z . test3 ( ) ) ;