diff core-javascript/core-javascript-work/closure-exercises.js @ 153:e8007df28827 core-javascript.closure-exercises

Add and populate closure-exercises.js.
author jf3243
date Wed, 02 Nov 2011 14:04:18 +0000
parents
children ee0bf994ab95
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core-javascript/core-javascript-work/closure-exercises.js	Wed Nov 02 14:04:18 2011 +0000
@@ -0,0 +1,198 @@
+var something;
+
+TEST('anon', function()
+{
+    var answer;                 
+    
+    // Hint: Uncomment the next line.
+    // answer = function(){ return 1; };
+
+    answer = function(){
+        return 1;
+    };
+
+    assert( answer() ===  1 );
+});
+
+
+TEST('anon', function()
+{
+    var outer_function = function(){
+
+        var answer;
+
+        // Define answer here.
+        answer = function(){
+            return 1;
+        };
+       
+        return answer;
+    };
+    
+    var my_inner_function = outer_function();
+
+    assert( typeof my_inner_function === 'function' );
+    assert( my_inner_function() === 1 );    
+});
+
+
+TEST('anon', function()
+{
+    var outer_function = function(){
+
+        var answer;
+
+        // Define answer here.
+        answer = function(){
+            return 1;
+        };
+       
+        return answer;
+    };
+    
+    assert( outer_function()() === 1 );
+});
+
+
+TEST('anon', function()
+{
+    var outer_function = function(n){
+
+        var answer;
+
+        // Define answer here.
+        answer = function(){
+            return n;
+        };
+       
+        return answer;
+    };
+    
+    assert( outer_function(1)() === 1 );
+    assert( outer_function(2)() === 2 );
+    assert( outer_function(3)() === 3 );
+});
+
+
+TEST('anon', function()
+{
+    var outer_function = function(n){
+
+        return function(){
+          return n;             // ANSWER
+        };
+    };
+    
+    assert( outer_function(1)() === 1 );
+    assert( outer_function(2)() === 2 );
+    assert( outer_function(3)() === 3 );
+});
+
+
+TEST('anon', function()
+{
+    var value = 1;
+
+    var get_value = function(){
+        return value;
+    };
+    
+    something = 1;
+    assert( get_value() === something );
+});
+
+
+TEST('anon', function()
+{
+    var value = 1;
+
+    var set_value = function(n){
+        value = n;
+    };
+    
+    set_value(2);
+    something = 2;
+    assert( value === something );
+});
+
+
+TEST('anon', function()
+{
+    var value = 1;
+
+    var get_value = function(){
+        return value;
+    };
+
+    var set_value = function(n){
+        value = n;
+    };
+
+    something = 1;    
+    assert( get_value() === something );
+
+    set_value(2);
+    something = 2;
+    assert( get_value() === something );
+});
+
+
+TEST('anon', function()
+{
+    var value = 1;
+
+    var ddd = function(aaa, bbb){
+        return {
+            aaa: aaa,
+            bbb: bbb
+            };
+    };
+
+
+    var obj = ddd(1, 2);
+
+    assert( obj.aaa === 1 );
+    assert( obj.bbb === 2 );
+
+});
+
+
+TEST('anon', function()
+{
+
+    var get_set_factory = function(){
+
+        var value;
+
+        var get = function(){
+            return value;  
+        };
+
+        var set = function(new_value){
+            value = new_value;
+        };
+
+        return {
+            get : get,
+            set : set
+        };
+    };
+
+    var tmp;
+    tmp = get_set_factory();
+    var get_a = tmp.get;
+    var set_a = tmp.set;
+
+    tmp = get_set_factory();
+    var get_b = tmp.get;
+    var set_b = tmp.set;
+
+
+    set_a('aaa');
+    assert( get_a() == 'aaa' );
+
+    set_b('bbb');
+    assert( get_b() == 'bbb' );
+
+    assert( get_a() == 'aaa' );
+});