// Замыкания // let button1 = document.createElement("button"); // button1.id = "first"; // button1.innerText = "0"; // document.body.appendChild(button1); // let button2 = document.createElement("button"); // button2.id = "second"; // button2.innerText = "0"; // document.body.appendChild(button2); // function clickCounter(element) { // let counter = 0; // element.onclick = function () { // element.innerText = ++counter; // }; // } // clickCounter(button1); // clickCounter(button2); // Замыкания ДЗ // makeProfileTimer // function makeProfileTimer() { // let time1 = performance.now(); // return function () { // let time2 = performance.now(); // return time2 - time1; // }; // } // let timer = makeProfileTimer(); // alert("Замеряем время работы этого alert"); // alert(`Время выполнения: ${timer().toFixed(3)} микросекунд`); // 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); // let namePrompt = prompt.bind(window, "Как тебя зовут?"); // let nameSaver = makeSaver(namePrompt); // alert(`Привет! Prompt еще не было!`); // alert( // `Привет ${nameSaver()}. Только что запустился prompt, первый и последний раз` // ); // alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`); // Final Countdown // (function () { // let countdown = 5; // function timer() { // console.log(countdown--); // if (countdown === 0) { // clearInterval(time); // console.log("Поехали!"); // } // } // let time = setInterval(timer, 1000); // })(); // myBind // function myBind(f, ctx, bind) { // function wrapper(...args) { // let count = 0; // const result = bind.map((index) => // index === undefined ? args[count++] : index // ); // return f.apply(ctx, result); // } // return wrapper; // } // let pow5 = myBind(Math.pow, Math, [undefined, 5]); // первый параметр - функция для биндинга значений по умолчанию, // // второй - this для этой функции, третий - массив, в котором undefined означает // // параметры, которые должны передаваться при вызове, // // а другие значения являются значениями по умолчанию: // let cube = myBind(Math.pow, Math, [undefined, 3]); // cube возводит число в куб // pow5(2); // => 32, вызывает Math.pow(2,5), соотнесите с [undefined, 5] // cube(3); // => 27 // let 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 // let zeroPrompt = myBind(prompt, window, [undefined, "0"]); // аналогично, только теперь задается "0" как текст по умолчанию в prompt, // // а текст приглашения пользователя задается при вызове zeroPrompt // let someNumber = zeroPrompt("Введите число"); // вызывает prompt("Введите число","0") // console.log( // myBind((...params) => params.join(""), null, [ // undefined, // "b", // undefined, // undefined, // "e", // "f", // ])("a", "c", "d") // ??? // ); // Multiplication table with closure // let table = document.createElement("table"); // table.setAttribute("border", "1"); // let tbdy = document.createElement("tbody"); // let tr = document.createElement("tr"); // for (let h = 0; h < 10; h++) { // let th = document.createElement("th"); // th.innerText = h; // tr.appendChild(th); // tbdy.appendChild(tr); // } // for (let i = 1; i < 10; i++) { // let tr = document.createElement("tr"); // let td = document.createElement("td"); // td.innerText = i; // tr.appendChild(td); // for (let j = 1; j < 10; j++) { // let td = document.createElement("td"); // td.innerText = i * j; // tr.appendChild(td); // } // tbdy.appendChild(tr); // } // table.appendChild(tbdy); // document.body.appendChild(table); // let readyTable = document.querySelector("table"); // function changeBg(event, cellColor, rowColor) { // const target = event.target; // const index = event.srcElement.cellIndex; // const rows = document.querySelectorAll("tr"); // function changeColor() { // try { // target.parentNode.style.background = rowColor; // for (let i = 0; i < rows.length; i++) { // rows[i].childNodes[index].style.background = rowColor; // target.style.background = cellColor; // } // } catch (e) {} // } // changeColor(); // } // readyTable.onmouseover = (event) => changeBg(event, "yellow", "pink"); // readyTable.onmouseout = (event) => changeBg(event, "", "");