main.js 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. //1 вариант
  2. function myTimer() {
  3. let time = performance.now();
  4. return function() {
  5. time = performance.now() - time;
  6. return ((time / 1000).toFixed(3))
  7. }
  8. }
  9. //2 вариант
  10. function myTimer2() {
  11. const start = new Date().getTime();
  12. return function() {
  13. const end = new Date().getTime();
  14. return ((end - start) / 1000)
  15. }
  16. }
  17. //var timer = myTimer()
  18. //alert('Замеряем время работы этого alert'); //некий код, время выполнения которого мы хотим измерить с высокой точностью
  19. //alert(timer()); //alert должен вывести время в микросекундах от выполнения makeProfileTimer до момента вызова timer(),
  20. // // т. е. измерить время выполнения alert
  21. //1 вариант
  22. function makeSaver(func) {
  23. let result;
  24. return function() {
  25. result = func();
  26. }
  27. }
  28. // 2 вариант через стрелочную функцию
  29. var makeSaver2 = (makeSaver2) => () => makeSaver2()
  30. // var saver = func(Math.random) //создает функцию-хранилище результата переданной в качестве параметра функции (Math.random
  31. // // в примере). На этом этапе Math.random НЕ вызывается
  32. // var value1 = saver() //saver вызывает переданную в makeSaver функцию, запоминает результат и возвращает его
  33. // var value2 = saver() //saver в дальнейшем просто хранит результат функции, и более НЕ вызывает переданную
  34. // //в makeSaver функцию;
  35. // value1 === value2 // всегда true
  36. // var saver2 = makeSaver(() => console.log('saved function called') || [null, undefined, false, '', 0, Math.random()][Math.ceil(Math.random() * 6)])
  37. // var value3 = saver2()
  38. // var value4 = saver2()
  39. // let a = value3 === value4 // тоже должно быть true
  40. // console.log(a);
  41. //Final Countdown Self Invoked Function
  42. let i = 6;
  43. (function timer() {
  44. if (--i < 1) {
  45. console.log('поехали')
  46. return
  47. } else {
  48. setTimeout(() => {
  49. console.log(i);
  50. timer()
  51. }, 1000);
  52. }
  53. })();
  54. //my bind
  55. function myBind(func, context, bindArguments) {
  56. return function(...args) {
  57. let newArgs = [];
  58. let iter = 0;
  59. for (let i in bindArguments) {
  60. //если в параметрах
  61. //по умолчани есть undefined,
  62. // пушим полученные параметры вместо него
  63. if (bindArguments[i] === undefined) {
  64. newArgs.push(args[iter])
  65. iter++
  66. } else {
  67. newArgs.push(bindArguments[i])
  68. }
  69. }
  70. return func.apply(context, newArgs);
  71. }
  72. }
  73. // var pow5 = myBind(Math.pow, Math, [undefined, 5])
  74. // console.log(pow5(2))
  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. // console.log(chessMin(-1, -5, 3, 15)) // вызывает Math.min(-1, 4, -5, 5, 3, 8, 15, 9), результат -5
  80. // let res = myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a', 'c', 'd') === 'abcdef'
  81. // console.log(res)