Browse Source

7(fn_2) 8(Closures)

Andrii Kozhyn 2 years ago
parent
commit
9da37bb08a
4 changed files with 287 additions and 0 deletions
  1. 15 0
      HW_js_8/index.html
  2. 143 0
      HW_js_8/scriptFn2.js
  3. 15 0
      HW_js_9/index.html
  4. 114 0
      HW_js_9/scriptClosures1.js

+ 15 - 0
HW_js_8/index.html

@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Document</title>
+  
+</head>
+<body>
+
+   
+    <script src="scriptFn2.js"></script>
+</body>
+</html>

+ 143 - 0
HW_js_8/scriptFn2.js

@@ -0,0 +1,143 @@
+// var persons = [
+//     {name: "Иван", age: 17},
+//     {name: "Мария", age: 35},
+//     {name: "Алексей", age: 73},
+//     {name: "Яков", age: 12},
+// ]
+
+
+// // sort(persons, "age"); //сортирует по возрасту по возрастанию
+// // sort(persons, "name", false);
+
+
+// function firstSort(array, elem, boolean) {
+//     switch (elem) {
+//         case "name":
+//         return array.sort(nameValue);
+  
+//         function nameValue(first, second) {
+//           if (boolean === true || boolean === undefined) {
+//             if (first.name > second.name) {
+//               return 1;
+//             }
+  
+//             if (first.name < second.name) {
+//               return -1;
+//             }
+//           } else {
+//             if (second.name > first.name) {
+//               return 1;
+//             }
+  
+//             if (second.name < first.name) {
+//               return -1;
+//             }
+//           }
+//         }
+  
+//         case "age":
+//         return array.sort(ageValue);
+  
+//         function ageValue(l, m) {
+//           if (boolean === true || boolean === undefined) {
+//             return l.age - m.age;
+//           } else {
+//             return m.age - l.age;
+//           }
+//         }
+  
+//       default:
+//         break;
+//     }
+//   }
+  
+//   console.log(firstSort(persons, "age"));
+
+
+// array map
+
+// ___________________________________________________
+
+
+// let massiv = ["1", {}, null, undefined, "500", 700];
+// let value = massiv.map(function(first){
+//   if(typeof first === 'string') {
+//     return parseInt(first);
+//   } else {
+//     return first;
+//   }
+// });
+// console.log(value);
+
+// array reduce
+
+// ___________________________________________________
+
+
+// let arr = ["0", 5, 3, "string", null]
+
+// function reduser(array) {
+//    let arrValue = array.filter(item => typeof(item) === 'number')
+//    return arrValue.reduce((sum, item) => sum + item, 0) 
+// }
+
+// console.log(reduser(arr))
+
+// object filter
+
+// ___________________________________________________
+
+// let phone = {
+//     brand: "meizu",
+//     model: "m2",
+//     ram: 2,
+//     color: "black",
+//   };
+  
+//   let valueFilter = {};
+  
+//   function filterPhone(obj, func) {
+//     Object.entries(obj).reduce(({}, [key, value]) => {
+//       if (func(key, value)) {
+//         valueFilter[key] = obj[key];
+//       }
+//       return valueFilter;
+//     });
+//   }
+  
+//   filterPhone(phone, (key, value) => key == "color" || value == 2);
+//   console.log(valueFilter);
+  
+
+// object map
+
+// ___________________________________________________
+
+// let object = { name: "Иван", age: 17 };
+// let resultAray = {};
+// objectMap(object, "_", "$");
+
+// function objectMap(object, changeKey, changeValue) {
+//   let keys = Object.keys(object);
+//   keys.map((item) => {
+//     let changedKey = item + changeKey;
+//     let changedValue = object[item] + changeValue;
+//     return (resultAray[changedKey] = changedValue);
+//   });
+// }
+
+// console.log(resultAray);
+
+// Sum____________________________________________________
+
+// function sum(point = 0, check = 1, value = 20) {
+//     if (value <= point) {
+//       return point;
+//     } else if (value <= point + check) {
+//       return point;
+//     } else {
+//       return point + sum(point + check, check, value);
+//     }
+//   }
+  
+//   console.log(sum(3, 2, 10));

+ 15 - 0
HW_js_9/index.html

@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Document</title>
+    <link rel="stylesheet" href="style.css">
+</head>
+<body>
+
+   
+    <script src="scriptClosures1.js"></script>
+</body>
+</html>

+ 114 - 0
HW_js_9/scriptClosures1.js

@@ -0,0 +1,114 @@
+
+// makeProfileTimer
+// Напишите функцию makeProfileTimer, которая служит для замера времени выполнения другого кода
+
+
+//  function makeProfileTimer() {
+//       let t0 = performance.now();
+//       alert('Замеряем время работы этого alert')
+//       var t1 = performance.now();
+//       let timer = () => t1 - t0;
+//       alert(timer())
+//     }
+//     makeProfileTimer();
+
+
+
+// makeSaver____________________________________________
+
+// function makeSaver(fValue) {
+//     let some = fValue
+//     return () => {
+//         function checked() {
+//             some  =  some()
+//         }
+//         if(typeof some === 'function') checked()
+//         return some
+//     }
+// }
+
+// var saver = makeSaver(Math.random); //создает функцию-хранилище результата переданной в качестве параметра функции (Math.random 
+//                                       // в примере). На этом этапе Math.random НЕ вызывается
+//     var value1 = saver();              //saver вызывает переданную в makeSaver функцию, запоминает результат и возвращает его
+//     var value2 = saver();              //saver в дальнейшем просто хранит результат функции, и более НЕ вызывает переданную 
+//                                       //в makeSaver функцию;
+//     console.log(value1 === value2);                // всегда true
+
+//     var saver2 = makeSaver(() => console.log('saved function called') || [null, undefined, false, '', 0, Math.random()][Math.ceil(Math.random()*6)]);
+//     var value3 = saver2();
+//     var value4 = saver2();
+
+//     console.log(value3 === value4); // тоже должно быть true
+    
+    
+    
+//     let namePrompt = prompt.bind(window, 'Как тебя зовут?');
+//     let nameSaver = makeSaver(namePrompt);
+//     alert(`Привет! Prompt еще не было!`);
+//     alert(`Привет ${nameSaver()}. Только что запустился prompt, первый и последний раз`);
+//     alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`);
+
+
+// Final Countdown___________________________________
+
+// function SelfInvoked (value) {
+//       console.log(value);
+//       value = value -1;
+        
+//       if (value === 0) {
+//         setTimeout(SelfInvoked, 1000, 'поехали!');
+//         return;
+//       }
+//       if(value) {
+//         return setTimeout(SelfInvoked, 1000, value);
+//       }
+//       return;
+//     }
+
+//  SelfInvoked(5);
+
+
+
+// myBind_____________________________________________________
+
+
+
+// function myBind (funcBind, context, mass) {
+  
+//     return function (...arg) {
+//       let numberOfValue = 0;
+     
+//       for (let i = 0; i < mass.length; i++) {
+//         if (!mass[i]) {
+//           mass[i] =  arg[numberOfValue];
+//           numberOfValue++;
+//         }
+//       }
+//       let result = funcBind.apply(context, mass)
+//       return result;
+//     }
+    
+//   }
+
+// var pow5 = myBind(Math.pow, Math, [undefined, 5]) // первый параметр - функция для биндинга значений по умолчанию, 
+//                                                   // второй - this для этой функции, третий - массив, в котором undefined означает
+//                                                   // параметры, которые должны передаваться при вызове,
+//                                                   // а другие значения являются значениями по умолчанию:
+// var cube = myBind(Math.pow, Math, [undefined, 3]) // cube возводит число в куб
+
+// console.log(pow5(2))
+// console.log(cube(3))
+
+
+// var chessMin = myBind(Math.min, Math, [undefined, 4, undefined, 5,undefined, 8,undefined, 9])
+// console.log(chessMin(-1,-5,3,15)) // вызывает Math.min(-1, 4, -5, 5, 3, 8, 15, 9), результат -5
+
+
+
+// var zeroPrompt = myBind(prompt, window, [undefined, "0"]) // аналогично, только теперь задается "0" как текст по умолчанию в prompt, 
+//                                                           // а текст приглашения пользователя задается при вызове zeroPrompt
+// var someNumber = zeroPrompt("Введите число")              // вызывает prompt("Введите число","0")
+
+// console.log (myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a','c','d') === 'abcdef')
+
+