# higher order functions higher order beacuse return function - forEach - map - filter - reduce ## ForEach forEach is not a return function direct iterate Syntax ```javascript= // first parameter is value [0, 1, 2, 3].forEach(function(value) { console.log(value) }) ``` // output ```shell= 0 1 2 3 ``` with index ```javascript= // second parameter is index ["delhi", "goa", "up", "mp"].forEach(function(value, index) { console.log(index, value); }) ``` // output ```shell= 0 "delhi" 1 "goa" 2 "up" 3 "mp" ``` // backend of code ```javascript= function forEach(list, callback) { for (var i = 0; i < list.length; i++) { callback( list[i], // value i // index ) } } ``` ## map map is return function generate new list from given/old list ```javascript= // example number var list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] var tableOf5 = list.map(function(value){ return value * 5; }) var tableOf6 = list.map(function(value){ return value * 6; }) // output // [5, 10, 15, 20, ....., 50] // [6, 12, 18, 24, ....., 60] ``` ```javascript= // example of string var states = ["delhi", "goa", "up", "mp"]; var isGood = states.map(function(value) { return value + " is good"; }) // output // ["delhi is good", "goa is good", "up is good", "mp is good"] ``` ## filter return function but condition check generate new list from given/old list ```javascript= var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; var even = numbers.filter(function(value) { return value % 2 == 0; }) var odd = numbers.filter(function(value) { return value % 2 != 0; }) ``` ## reduce merge given value generate new list from given/old list|combine string ```javascript= var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // reduce // first parameter function // first parameter is initial value // second parameter is list value // second parameter initial value var sum = numbers.reduce(function(a, value){ return a + value }, 0) // output // 55 var sum = numbers.reduce(function(a, value){ return a + value }, '') // output // 012345678910 ``` ## call by value and call by reference ### call by value ```javascript= var t = 10; var t2 = t; console.log(t); // 10 console.log(t2); // 10 // Change value t2 = 20; console.log(t2); // 20 console.log(t); // 10 ``` ### call by reference ```javascript= var t = [0, 1, 2]; var t2 = t; console.log(t); // [0, 1, 2] console.log(t2); // [0, 1, 2] // Change list t2.push(10); console.log(t2); // [0, 1, 2, 10] console.log(t); // [0, 1, 2, 10] ```