Alex преди 2 години
родител
ревизия
06d60199a0
променени са 2 файла, в които са добавени 114 реда и са изтрити 0 реда
  1. 11 0
      09/README.md
  2. 103 0
      09/script.js

+ 11 - 0
09/README.md

@@ -0,0 +1,11 @@
+### Домашнее задание. Замыкания
+* **makeProfileTimer**
+    * function makeProfileTimer()
+* **makeSaver**
+    * function makeSaver(func)
+* **Final Countdown**
+    * function (()=>{})()
+* **myBind**
+    * function myBind(func, context, args)
+* **Таблица умножения**
+    * function objectFilter(obj, func)

+ 103 - 0
09/script.js

@@ -0,0 +1,103 @@
+/* ЗАДАНИЕ makeProfileTimer */
+function makeProfileTimer() {
+    let start = performance.now();
+    return () => performance.now() - start;
+}
+
+let timer = makeProfileTimer();
+alert('Замеряем время работы этого alert');
+alert(timer());
+
+
+/* ЗАДАНИЕ makeSaver */
+function makeSaver(func){
+    let saver = func();
+    return () => saver;
+}
+
+let saver = makeSaver(Math.random);
+let value1 = saver()
+let value2 = saver()
+console.log(value1 === value2);
+let saver2 = makeSaver(() => console.log('saved function called') || [null, undefined, false, '', 0, Math.random()][Math.ceil(Math.random()*6)])
+let value3 = saver2()
+let value4 = saver2()
+console.log(value3 === value4);
+
+
+/* ЗАДАНИЕ Final Countdown */
+((n=5) => {
+    setTimeout(function run() {
+    console.log(n--);
+    let stop = setTimeout(run, 1000);
+    if(n===0) {clearTimeout(stop); console.log("поехали!")}
+    }, 1000)
+})();
+
+
+/* ЗАДАНИЕ myBind */
+function myBind(func, context, args){
+    return (...undArgs) => {
+        let counter = 0;
+        args.forEach((item, index) => {
+            (item === undefined) && args.splice(index, 1, undArgs[counter++]);
+        })
+        return func.apply(context, args);
+    }
+}
+
+let pow5 = myBind(Math.pow, Math, [undefined, 5]);
+let cube = myBind(Math.pow, Math, [undefined, 3])
+console.log(pow5(2));
+console.log(cube(3));
+let chessMin = myBind(Math.min, Math, [undefined, 4, undefined, 5,undefined, 8,undefined, 9]);
+console.log(chessMin(-1,-5,3,15));
+let zeroPrompt = myBind(prompt, window, [undefined, "0"]);
+let someNumber = zeroPrompt("Введите число");
+console.log(someNumber);
+console.log(myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a','c','d'));
+
+// Переделанная таблицы умножения
+function multiplicationTable() {
+    let table = document.createElement('table');
+    table.style.fontFamily = 'sans-serif';
+    let arrNum = [];
+    for (let i = 1; i <= 10; i++) {
+        arrNum[i] = [];
+        for (let j = 1; j <= 10; j++) {
+            arrNum[i][j-1] = i * j;
+        }
+    }
+    for (let row = 1; row <= arrNum.length-1; row++) {
+        let tr = document.createElement('tr');
+        for (let col = 0; col < arrNum.length-1; col++) {
+            let td = document.createElement('td');
+            td.innerText = arrNum[row][col];
+            td.onmouseout = function(event){
+                this.style.backgroundColor = '';
+                Array.from(this.parentElement.children).forEach(item => item.style.backgroundColor = '');
+                colTable(this.cellIndex, '');
+            }
+            td.onmouseover = function(event){
+                Array.from(this.parentElement.children).forEach(item => item.style.backgroundColor = '#aaa');
+                colTable(this.cellIndex, '#aaa');
+                this.style.backgroundColor = '#6d75cb';
+            }
+            tr.append(td);
+        }
+        for (let cell of tr.cells) {
+            cell.style.border = '2px solid #000';
+            cell.style.padding = '10px';
+            cell.style.textAlign = 'center';
+            cell.classList.add('td');
+        }
+        table.append(tr);
+    }
+    document.body.append(table);
+    function colTable(index, str){
+        for (let row of document.querySelector('table').rows) {
+            row.cells[index].style.backgroundColor = str;
+        }
+    }
+} // Таблица умножения
+multiplicationTable();