index.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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. let namePrompt = prompt.bind(window, 'Как тебя зовут?')
  48. let nameSaver = makeSaver(namePrompt)
  49. alert(`Привет! Prompt еще не было!`)
  50. alert(`Привет ${nameSaver()}. Только что запустился prompt, первый и последний раз`)
  51. alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`)
  52. }
  53. // finalCountdownWrapp()
  54. function finalCountdownWrapp() {
  55. let i = 0;
  56. (function loop() {
  57. setTimeout(function () {
  58. console.log(++i)
  59. loop()
  60. }, 1000)
  61. })()
  62. }
  63. // myBindWrapp()
  64. function myBindWrapp() {
  65. function myBind(func, funcThis, array) {
  66. return function (...newParams) {
  67. let args = () => {
  68. let newArr = []
  69. let i = 0
  70. for (const el of array) {
  71. if (el === undefined) {
  72. newArr.push(newParams[i])
  73. i++
  74. } else {
  75. newArr.push(el)
  76. }
  77. }
  78. let restParams = newParams.slice(i)
  79. return [...newArr, ...restParams]
  80. }
  81. // console.log(args())
  82. return func.apply(funcThis, args())
  83. }
  84. }
  85. let pow5 = myBind(Math.pow, Math, [undefined, 5])
  86. let cube = myBind(Math.pow, Math, [undefined, 3])
  87. pow5(2)
  88. cube(3)
  89. console.log(pow5(2))
  90. console.log(cube(3))
  91. let chessMin = myBind(Math.min, Math, [undefined, 4, undefined, 5,undefined, 8,undefined, 9])
  92. chessMin(-1,-5,3,15)
  93. console.log(chessMin(-1,-5,3,15))
  94. let zeroPrompt = myBind(prompt, window, [undefined, "0"])
  95. let someNumber = zeroPrompt("Введите число")
  96. myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a','c','d') === 'abcdef'
  97. console.log(myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a','c','d','UU','AA'))
  98. }