Browse Source

HW Closures. Done

OleksiiL 1 year ago
parent
commit
f32a516c96
3 changed files with 180 additions and 0 deletions
  1. 18 0
      Homework_21/Closures.html
  2. 81 0
      Homework_21/Closures.js
  3. 81 0
      Homework_21/Clousers.js

+ 18 - 0
Homework_21/Closures.html

@@ -0,0 +1,18 @@
+<!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>Clousers</title>
+</head>
+
+<body>
+
+    <button onclick="count()">Клик</button>
+
+    <script src="/Clousers.js"></script>
+</body>
+
+</html>

+ 81 - 0
Homework_21/Closures.js

@@ -0,0 +1,81 @@
+// Замыкания
+// makeProfileTimer---------------------------------------------------------------------------------------------------------------------;
+function makeProfileTimer() {
+  t1 = performance.now();
+  confirm("Are you sure?");
+  t2 = performance.now();
+  return alert(
+    "Call to confirm function took" + " " + (t2 - t1) + " " + "milliseconds"
+  );
+}
+
+var timer = makeProfileTimer();
+
+alert(timer());
+
+// makeSaver----------------------------------------------------------------------------------------------------------------------------;
+
+function makeSaver(callable) {
+  let res,
+    executed = !1;
+  return function () {
+    return executed ? res : ((executed = !0), (res = callable()));
+  };
+}
+var saver = makeSaver(Math.random);
+value1 = saver();
+value2 = saver();
+console.log(value1 === value2);
+
+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();
+
+value3 === value4;
+
+let namePrompt = prompt.bind(window, "Как тебя зовут?");
+let nameSaver = makeSaver(namePrompt);
+alert(`Привет! Prompt еще не было!`);
+alert(
+  `Привет ${nameSaver()}. Только что запустился prompt, первый и последний раз`
+);
+alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`);
+
+// Final Countdown----------------------------------------------------------------------------------------------------------------------;
+
+const messages = [5, 4, 3, 2, 1, "Go"];
+
+for (let i = 0; i < messages.length; i++) {
+  setTimeout(function () {
+    console.log(messages[i]);
+  }, 1000 * i);
+}
+
+// myBind-------------------------------------------------------------------------------------------------------------------------------;
+
+function myBind(func, context, bindArgs) {
+  function wrapper() {
+    var args = Object.assign(bindArgs, arguments);
+    return func.apply(context, args);
+  }
+
+  return wrapper;
+}
+
+var pow5 = myBind(Math.pow, Math, [undefined, 5]);
+
+var cube = myBind(Math.pow, Math, [undefined, 3]);
+
+alert(pow5(2));
+
+alert(cube(3));
+
+var zeroPrompt = myBind(prompt, window, [undefined, "0"]);
+
+var someNumber = zeroPrompt("Введите число");
+
+alert(someNumber);

+ 81 - 0
Homework_21/Clousers.js

@@ -0,0 +1,81 @@
+// Замыкания
+// makeProfileTimer---------------------------------------------------------------------------------------------------------------------;
+function makeProfileTimer() {
+  t1 = performance.now();
+  confirm("Are you sure?");
+  t2 = performance.now();
+  return alert(
+    "Call to confirm function took" + " " + (t2 - t1) + " " + "milliseconds"
+  );
+}
+
+var timer = makeProfileTimer();
+
+alert(timer());
+
+// makeSaver----------------------------------------------------------------------------------------------------------------------------;
+
+function makeSaver(callable) {
+  let res,
+    executed = !1;
+  return function () {
+    return executed ? res : ((executed = !0), (res = callable()));
+  };
+}
+var saver = makeSaver(Math.random);
+value1 = saver();
+value2 = saver();
+console.log(value1 === value2);
+
+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();
+
+value3 === value4;
+
+let namePrompt = prompt.bind(window, "Как тебя зовут?");
+let nameSaver = makeSaver(namePrompt);
+alert(`Привет! Prompt еще не было!`);
+alert(
+  `Привет ${nameSaver()}. Только что запустился prompt, первый и последний раз`
+);
+alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`);
+
+// Final Countdown----------------------------------------------------------------------------------------------------------------------;
+
+const messages = [5, 4, 3, 2, 1, "Go"];
+
+for (let i = 0; i < messages.length; i++) {
+  setTimeout(function () {
+    console.log(messages[i]);
+  }, 1000 * i);
+}
+
+// myBind-------------------------------------------------------------------------------------------------------------------------------;
+
+function myBind(func, context, bindArgs) {
+  function wrapper() {
+    var args = Object.assign(bindArgs, arguments);
+    return func.apply(context, args);
+  }
+
+  return wrapper;
+}
+
+var pow5 = myBind(Math.pow, Math, [undefined, 5]);
+
+var cube = myBind(Math.pow, Math, [undefined, 3]);
+
+alert(pow5(2));
+
+alert(cube(3));
+
+var zeroPrompt = myBind(prompt, window, [undefined, "0"]);
+
+var someNumber = zeroPrompt("Введите число");
+
+alert(someNumber);