index.js 2.4 KB

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