index.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. // makeProfileTimerWrapp()
  2. function makeProfileTimerWrapp() {
  3. function makeProfileTimer() {
  4. let time1 = performance.now()
  5. return function () {
  6. let time2 = performance.now()
  7. return time2 - time1
  8. }
  9. }
  10. let timer = makeProfileTimer()
  11. alert('Замеряем время работы этого alert')
  12. alert(timer())
  13. }
  14. // makeSaverWrapp()
  15. function makeSaverWrapp() {
  16. function makeSaver(func) {
  17. let storage = null
  18. let label = false
  19. return function () {
  20. if (label === false) {
  21. label = true
  22. storage = func()
  23. return storage
  24. } else {
  25. return storage
  26. }
  27. }
  28. }
  29. let saver = makeSaver(Math.random)
  30. let value1 = saver()
  31. let value2 = saver()
  32. console.log(value1)
  33. console.log(value2)
  34. console.log(value1 === value2)
  35. {
  36. let saver2 = makeSaver(() => console.log('saved function called') || [null, undefined, false, '', 0, Math.random()][Math.floor(Math.random()*6)])
  37. let value3 = saver2()
  38. let value4 = saver2()
  39. console.log(value3, value4)
  40. }
  41. {
  42. let saver2 = makeSaver(() => console.log('saved function called') || [null, undefined, false, '', 0, Math.random()][Math.floor(Math.random()*6)])
  43. let value3 = saver2()
  44. let value4 = saver2()
  45. console.log(value3, value4)
  46. }
  47. }
  48. // finalCountdownWrapp()
  49. function finalCountdownWrapp() {
  50. let i = 0;
  51. (function loop() {
  52. setTimeout(function () {
  53. console.log(++i)
  54. loop()
  55. }, 1000)
  56. })()
  57. }
  58. // myBindWrapp()
  59. function myBindWrapp() {
  60. function myBind(func, funcThis, array) {
  61. return function (...newParams) {
  62. let args = () => {
  63. let newArr = []
  64. let i = 0
  65. for (const el of array) {
  66. if (el === undefined) {
  67. newArr.push(newParams[i])
  68. i++
  69. } else {
  70. newArr.push(el)
  71. }
  72. }
  73. let restParams = newParams.slice(i)
  74. return [...newArr, ...restParams]
  75. }
  76. // console.log(args())
  77. return func.apply(funcThis, args())
  78. }
  79. }
  80. let pow5 = myBind(Math.pow, Math, [undefined, 5])
  81. let cube = myBind(Math.pow, Math, [undefined, 3])
  82. pow5(2)
  83. cube(3)
  84. console.log(pow5(2))
  85. console.log(cube(3))
  86. let chessMin = myBind(Math.min, Math, [undefined, 4, undefined, 5,undefined, 8,undefined, 9])
  87. chessMin(-1,-5,3,15)
  88. console.log(chessMin(-1,-5,3,15))
  89. let zeroPrompt = myBind(prompt, window, [undefined, "0"])
  90. let someNumber = zeroPrompt("Введите число")
  91. myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a','c','d') === 'abcdef'
  92. console.log(myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a','c','d','UU','AA'))
  93. }