index.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. // Замыкания
  2. // let button1 = document.createElement("button");
  3. // button1.id = "first";
  4. // button1.innerText = "0";
  5. // document.body.appendChild(button1);
  6. // let button2 = document.createElement("button");
  7. // button2.id = "second";
  8. // button2.innerText = "0";
  9. // document.body.appendChild(button2);
  10. // function clickCounter(element) {
  11. // let counter = 0;
  12. // element.onclick = function () {
  13. // element.innerText = ++counter;
  14. // };
  15. // }
  16. // clickCounter(button1);
  17. // clickCounter(button2);
  18. // Замыкания ДЗ
  19. // makeProfileTimer
  20. // function makeProfileTimer() {
  21. // let time1 = performance.now();
  22. // return function () {
  23. // let time2 = performance.now();
  24. // return time2 - time1;
  25. // };
  26. // }
  27. // let timer = makeProfileTimer();
  28. // alert("Замеряем время работы этого alert");
  29. // alert(`Время выполнения: ${timer().toFixed(3)} микросекунд`);
  30. // makeSaver
  31. // function makeSaver(func) {
  32. // let saver = func();
  33. // return () => saver;
  34. // }
  35. // let saver = makeSaver(Math.random);
  36. // let value1 = saver();
  37. // let value2 = saver();
  38. // console.log(value1 === value2);
  39. // let saver2 = makeSaver(
  40. // () =>
  41. // console.log("saved function called") ||
  42. // [null, undefined, false, "", 0, Math.random()][Math.ceil(Math.random() * 6)]
  43. // );
  44. // let value3 = saver2();
  45. // let value4 = saver2();
  46. // console.log(value3 === value4);
  47. // let namePrompt = prompt.bind(window, "Как тебя зовут?");
  48. // let nameSaver = makeSaver(namePrompt);
  49. // alert(`Привет! Prompt еще не было!`);
  50. // alert(
  51. // `Привет ${nameSaver()}. Только что запустился prompt, первый и последний раз`
  52. // );
  53. // alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`);
  54. // Final Countdown
  55. // (function () {
  56. // let countdown = 5;
  57. // function timer() {
  58. // console.log(countdown--);
  59. // if (countdown === 0) {
  60. // clearInterval(time);
  61. // console.log("Поехали!");
  62. // }
  63. // }
  64. // let time = setInterval(timer, 1000);
  65. // })();
  66. // myBind
  67. // function myBind(f, ctx, bind) {
  68. // function wrapper(...args) {
  69. // let count = 0;
  70. // const result = bind.map((index) =>
  71. // index === undefined ? args[count++] : index
  72. // );
  73. // return f.apply(ctx, result);
  74. // }
  75. // return wrapper;
  76. // }
  77. // let pow5 = myBind(Math.pow, Math, [undefined, 5]); // первый параметр - функция для биндинга значений по умолчанию,
  78. // // второй - this для этой функции, третий - массив, в котором undefined означает
  79. // // параметры, которые должны передаваться при вызове,
  80. // // а другие значения являются значениями по умолчанию:
  81. // let cube = myBind(Math.pow, Math, [undefined, 3]); // cube возводит число в куб
  82. // pow5(2); // => 32, вызывает Math.pow(2,5), соотнесите с [undefined, 5]
  83. // cube(3); // => 27
  84. // let chessMin = myBind(Math.min, Math, [
  85. // undefined,
  86. // 4,
  87. // undefined,
  88. // 5,
  89. // undefined,
  90. // 8,
  91. // undefined,
  92. // 9,
  93. // ]);
  94. // console.log(chessMin(-1, -5, 3, 15)); // вызывает Math.min(-1, 4, -5, 5, 3, 8, 15, 9), результат -5
  95. // let zeroPrompt = myBind(prompt, window, [undefined, "0"]); // аналогично, только теперь задается "0" как текст по умолчанию в prompt,
  96. // // а текст приглашения пользователя задается при вызове zeroPrompt
  97. // let someNumber = zeroPrompt("Введите число"); // вызывает prompt("Введите число","0")
  98. // console.log(
  99. // myBind((...params) => params.join(""), null, [
  100. // undefined,
  101. // "b",
  102. // undefined,
  103. // undefined,
  104. // "e",
  105. // "f",
  106. // ])("a", "c", "d") // ???
  107. // );
  108. // Multiplication table with closure
  109. // let table = document.createElement("table");
  110. // table.setAttribute("border", "1");
  111. // let tbdy = document.createElement("tbody");
  112. // let tr = document.createElement("tr");
  113. // for (let h = 0; h < 10; h++) {
  114. // let th = document.createElement("th");
  115. // th.innerText = h;
  116. // tr.appendChild(th);
  117. // tbdy.appendChild(tr);
  118. // }
  119. // for (let i = 1; i < 10; i++) {
  120. // let tr = document.createElement("tr");
  121. // let td = document.createElement("td");
  122. // td.innerText = i;
  123. // tr.appendChild(td);
  124. // for (let j = 1; j < 10; j++) {
  125. // let td = document.createElement("td");
  126. // td.innerText = i * j;
  127. // tr.appendChild(td);
  128. // }
  129. // tbdy.appendChild(tr);
  130. // }
  131. // table.appendChild(tbdy);
  132. // document.body.appendChild(table);
  133. // let readyTable = document.querySelector("table");
  134. // function changeBg(event, cellColor, rowColor) {
  135. // const target = event.target;
  136. // const index = event.srcElement.cellIndex;
  137. // const rows = document.querySelectorAll("tr");
  138. // function changeColor() {
  139. // try {
  140. // target.parentNode.style.background = rowColor;
  141. // for (let i = 0; i < rows.length; i++) {
  142. // rows[i].childNodes[index].style.background = rowColor;
  143. // target.style.background = cellColor;
  144. // }
  145. // } catch (e) {}
  146. // }
  147. // changeColor();
  148. // }
  149. // readyTable.onmouseover = (event) => changeBg(event, "yellow", "pink");
  150. // readyTable.onmouseout = (event) => changeBg(event, "", "");