hw.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. 'use strict';
  2. //Замыкания
  3. const makeProfileTimer = (cb) => {
  4. const start = performance.now();
  5. cb();
  6. return () => performance.now() - start;
  7. };
  8. const timer = makeProfileTimer(() =>
  9. alert('Замеряем время работы этого alert')
  10. );
  11. alert(timer());
  12. const makeSaver = (value) => () => value;
  13. const saver = makeSaver(Math.random);
  14. const value1 = saver();
  15. const value2 = saver();
  16. console.log(value1 === value2, 'value1 === value2');
  17. const saver2 = makeSaver(
  18. () =>
  19. console.log('saved function called') ||
  20. [null, undefined, false, '', 0, Math.random()][Math.ceil(Math.random() * 6)]
  21. );
  22. const value3 = saver2();
  23. const value4 = saver2();
  24. console.log(value3 === value4, 'value3 === value4'); // тоже должно быть true
  25. (function selfCountDown(n) {
  26. if (n === 0) return;
  27. setTimeout(() => {
  28. console.log(n);
  29. selfCountDown(n - 1);
  30. }, 1000);
  31. })(5);
  32. const myBind = function (fnBind, context, settings) {
  33. return function (...params) {
  34. let i = 0;
  35. const array = settings.map((settingsItem) => {
  36. if (settingsItem === undefined) {
  37. const paramsItem = params[i];
  38. i += 1;
  39. return paramsItem;
  40. } else {
  41. return settingsItem;
  42. }
  43. });
  44. return fnBind.apply(context, array);
  45. };
  46. };
  47. const pow5 = myBind(Math.pow, Math, [undefined, 5]);
  48. const cube = myBind(Math.pow, Math, [undefined, 3]);
  49. console.log(pow5(2)); // => 32, вызывает Math.pow(2,5), соотнесите с [undefined, 5]
  50. console.log(cube(3)); // => 27
  51. const chessMin = myBind(Math.min, Math, [
  52. undefined,
  53. 4,
  54. undefined,
  55. 5,
  56. undefined,
  57. 8,
  58. undefined,
  59. 9,
  60. ]);
  61. console.log(chessMin(-1, -5, 3, 15));
  62. const zeroPrompt = myBind(prompt, window, [undefined, '0']);
  63. const someNumber = zeroPrompt('Введите число myBind'); // вызывает prompt("Введите число","0")\
  64. console.log(
  65. myBind((...params) => params.join(''), null, [
  66. undefined,
  67. 'b',
  68. undefined,
  69. undefined,
  70. 'e',
  71. 'f',
  72. ])('a', 'c', 'd') === 'abcdef'
  73. );