main.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. //makeProfileTimer
  2. function makeProfileTimer() {
  3. let prev = performance.now();
  4. return function () {
  5. let next = performance.now();
  6. return ("Время выполнения: " + (next - prev));
  7. }
  8. }
  9. //makeSaver
  10. function makeSaver(el) {
  11. let result;
  12. let doFunc = true;
  13. return function () {
  14. if (doFunc) {
  15. result = el();
  16. doFunc = false;
  17. }
  18. return result;
  19. }
  20. }
  21. var saver = makeSaver(Math.random);
  22. var value1 = saver();
  23. var value2 = saver();
  24. value1 === value2 // true
  25. var saver2 = makeSaver(() => console.log('saved function called') || [null, undefined, false, '', 0, Math.random()][Math.ceil(Math.random() * 6)])
  26. var value3 = saver2()
  27. var value4 = saver2()
  28. value3 === value4 // тоже true
  29. //Final Countdown
  30. function finalCountdown(lastCountNumber) { //параметр число с которого начинается обратный отсчёт
  31. if (lastCountNumber >= 0) {
  32. setTimeout((function () {
  33. lastCountNumber === 0 ? console.log("поехали!") : console.log(lastCountNumber);
  34. finalCountdown(lastCountNumber - 1);
  35. }), 1000)
  36. }
  37. }
  38. //myBind
  39. function myBind(func, context, ...args) {
  40. let argsCopy = args;
  41. argsCopy = argsCopy.flat();
  42. return function (...args2) {
  43. let j = 0;
  44. for (let i = 0; i < argsCopy.length; i++) {
  45. if (argsCopy[i] === undefined) {
  46. argsCopy[i] = args2[j]
  47. j++;
  48. }
  49. }
  50. return func.call(context, ...argsCopy)
  51. }
  52. }
  53. var pow5 = myBind(Math.pow, Math, [undefined, 5])
  54. var cube = myBind(Math.pow, Math, [undefined, 3])
  55. pow5(2) // => 32, вызывает Math.pow(2,5)
  56. cube(3) // => 27, вызывает Math.pow(3,3)
  57. var chessMin = myBind(Math.min, Math, [undefined, 4, undefined, 5, undefined, 8, undefined, 9])
  58. chessMin(-1, -5, 3, 15) // вызывает Math.min(-1, 4, -5, 5, 3, 8, 15, 9), результат -5
  59. var zeroPrompt = myBind(prompt, window, [undefined, "0"])
  60. var someNumber = zeroPrompt("Введите число") // вызывает prompt("Введите число","0")
  61. myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a', 'c', 'd') === 'abcdef' //true