|
@@ -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);
|