Index.html 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div>
  11. <button onclick="clickCounter()" id="button">btn</button>
  12. <span id="span"></span>
  13. </div>
  14. <script>
  15. //makeProfileTimer///
  16. function makeProfileTimer() {
  17. let t0 = performance.now();
  18. return function () {
  19. let t1 = performance.now();
  20. console.log(t1 - t0);
  21. }
  22. }
  23. var timer = makeProfileTimer()
  24. alert('Замеряем время работы этого alert'); //некий код, время выполнения которого мы хотим измерить с высокой точностью
  25. alert(timer()); //alert должен вывести время в микросекундах от выполнения makeProfileTimer до момента вызова timer(),
  26. // т. е. измерить время выполнения alert
  27. var t0 = performance.now();
  28. console.log(1432 ** 42343 + 2424 / 3423 * 432);
  29. var t1 = performance.now();
  30. console.log("Call to doSomething took " + (t1 - t0) + " milliseconds.");
  31. //makeSaver1//
  32. function makeSaver(callable) {
  33. let res;
  34. let executed = !1;
  35. return function () {
  36. return executed ? res : (executed = !0, res = callable());
  37. };
  38. };
  39. var saver = makeSaver(Math.random) //создает функцию-хранилище результата переданной в качестве параметра функции (Math.random
  40. // в примере). На этом этапе Math.random НЕ вызывается
  41. var value1 = saver() //saver вызывает переданную в makeSaver функцию, запоминает результат и возвращает его
  42. var value2 = saver() //saver в дальнейшем просто хранит результат функции, и более НЕ вызывает переданную
  43. //в makeSaver функцию;
  44. value1 === value2 // всегда true
  45. var saver2 = makeSaver(() => console.log('saved function called') || [null, undefined, false, '', 0, Math.random()][Math.ceil(Math.random() * 6)])
  46. var value3 = saver2()
  47. var value4 = saver2()
  48. value3 === value4 // тоже должно быть true
  49. //Final Countdown//
  50. (function () {
  51. let countdown = 5;
  52. function t() {
  53. for (let i = 0; i < countdown; i++) {
  54. setTimeout(function () {
  55. console.log(countdown--);
  56. if (!countdown) {
  57. console.log('поехали!')
  58. }
  59. }, 1000 * i);
  60. }
  61. }
  62. t()
  63. })();
  64. //myBind//
  65. function myBind(func, context, bindArgs) {
  66. return function wrapper() {
  67. var args = Object.assign(bindArgs, arguments);
  68. return func.apply(context, args);
  69. }
  70. }
  71. var pow5 = myBind(Math.pow, Math, [undefined, 5]) // первый параметр - функция для биндинга значений по умолчанию,
  72. // второй - this для этой функции, третий - массив, в котором undefined означает
  73. // параметры, которые должны передаваться при вызове,
  74. // а другие значения являются значениями по умолчанию:
  75. var cube = myBind(Math.pow, Math, [undefined, 3]) // cube возводит число в куб
  76. pow5(2) // => 32, вызывает Math.pow(2,5), соотнесите с [undefined, 5]
  77. cube(3) // => 27
  78. var chessMin = myBind(Math.min, Math, [undefined, 4, undefined, 5, undefined, 8, undefined, 9])
  79. chessMin(-1, -5, 3, 15) // вызывает Math.min(-1, 4, -5, 5, 3, 8, 15, 9), результат -5
  80. var zeroPrompt = myBind(prompt, window, [undefined, "0"]) // аналогично, только теперь задается "0" как текст по умолчанию в prompt,
  81. // а текст приглашения пользователя задается при вызове zeroPrompt
  82. var someNumber = zeroPrompt("Введите число") // вызывает prompt("Введите число","0")
  83. myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a', 'c', 'd') === 'abcdef'
  84. </script>
  85. </body>
  86. </html>