hw.js 1.9 KB

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