hw.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. 'use strict';
  2. //Замыкания
  3. const makeProfileTimer = () => {
  4. const start = performance.now();
  5. alert('Замеряем время работы этого alert');
  6. return () => performance.now() - start;
  7. };
  8. const timer = makeProfileTimer();
  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. console.log(n);
  27. selfCountDown(n - 1);
  28. }, 1000);
  29. })(5);
  30. const myBind = function (fnBind, context, settings) {
  31. return function (...params) {
  32. let i = 0;
  33. const array = settings.map((settingsItem) => {
  34. if (settingsItem === undefined) {
  35. const paramsItem = params[i];
  36. i += 1;
  37. return paramsItem;
  38. } else {
  39. return settingsItem;
  40. }
  41. });
  42. return fnBind.apply(context, array);
  43. };
  44. };
  45. const pow5 = myBind(Math.pow, Math, [undefined, 5]);
  46. const cube = myBind(Math.pow, Math, [undefined, 3]);
  47. console.log(pow5(2)); // => 32, вызывает Math.pow(2,5), соотнесите с [undefined, 5]
  48. console.log(cube(3)); // => 27
  49. const chessMin = myBind(Math.min, Math, [
  50. undefined,
  51. 4,
  52. undefined,
  53. 5,
  54. undefined,
  55. 8,
  56. undefined,
  57. 9,
  58. ]);
  59. console.log(chessMin(-1, -5, 3, 15));
  60. const zeroPrompt = myBind(prompt, window, [undefined, '0']);
  61. const someNumber = zeroPrompt('Введите число myBind'); // вызывает prompt("Введите число","0")\
  62. console.log(
  63. myBind((...params) => params.join(''), null, [
  64. undefined,
  65. 'b',
  66. undefined,
  67. undefined,
  68. 'e',
  69. 'f',
  70. ])('a', 'c', 'd') === 'abcdef'
  71. );