Clousers.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // Замыкания
  2. // makeProfileTimer---------------------------------------------------------------------------------------------------------------------;
  3. function makeProfileTimer() {
  4. t1 = performance.now();
  5. confirm("Are you sure?");
  6. t2 = performance.now();
  7. return alert(
  8. "Call to confirm function took" + " " + (t2 - t1) + " " + "milliseconds"
  9. );
  10. }
  11. var timer = makeProfileTimer();
  12. alert(timer());
  13. // makeSaver----------------------------------------------------------------------------------------------------------------------------;
  14. function makeSaver(callable) {
  15. let res,
  16. executed = !1;
  17. return function () {
  18. return executed ? res : ((executed = !0), (res = callable()));
  19. };
  20. }
  21. var saver = makeSaver(Math.random);
  22. value1 = saver();
  23. value2 = saver();
  24. console.log(value1 === value2);
  25. var saver2 = makeSaver(
  26. () =>
  27. console.log("saved function called") ||
  28. [null, undefined, false, "", 0, Math.random()][Math.ceil(Math.random() * 6)]
  29. );
  30. var value3 = saver2();
  31. var value4 = saver2();
  32. value3 === value4;
  33. let namePrompt = prompt.bind(window, "Как тебя зовут?");
  34. let nameSaver = makeSaver(namePrompt);
  35. alert(`Привет! Prompt еще не было!`);
  36. alert(
  37. `Привет ${nameSaver()}. Только что запустился prompt, первый и последний раз`
  38. );
  39. alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`);
  40. // Final Countdown----------------------------------------------------------------------------------------------------------------------;
  41. const messages = [5, 4, 3, 2, 1, "Go"];
  42. for (let i = 0; i < messages.length; i++) {
  43. setTimeout(function () {
  44. console.log(messages[i]);
  45. }, 1000 * i);
  46. }
  47. // myBind-------------------------------------------------------------------------------------------------------------------------------;
  48. function myBind(func, context, bindArgs) {
  49. function wrapper() {
  50. var args = Object.assign(bindArgs, arguments);
  51. return func.apply(context, args);
  52. }
  53. return wrapper;
  54. }
  55. var pow5 = myBind(Math.pow, Math, [undefined, 5]);
  56. var cube = myBind(Math.pow, Math, [undefined, 3]);
  57. alert(pow5(2));
  58. alert(cube(3));
  59. var zeroPrompt = myBind(prompt, window, [undefined, "0"]);
  60. var someNumber = zeroPrompt("Введите число");
  61. alert(someNumber);