script.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // --------------------------------------------------makeProfileTimer-------------------------------------------------------------------
  2. // function makeProfileTimer() {
  3. // let startTime = performance.now();
  4. // return function () {
  5. // return performance.now() - startTime;
  6. // }
  7. // };
  8. // const timer = makeProfileTimer();
  9. // alert('Замеряем время работы этого alert');
  10. // alert(`Time for this alert running is: ${timer()}`);
  11. // --------------------------------------------------makeSaver-------------------------------------------------------------------
  12. // function makeSaver(someFunc) {
  13. // let firstRun = true;
  14. // let saveResult;
  15. // return function() {
  16. // if(firstRun) {
  17. // saveResult = someFunc();
  18. // firstRun = false;
  19. // console.log(`Result is saved: ${saveResult}`);
  20. // }
  21. // return saveResult;
  22. // }
  23. // }
  24. // var saver = makeSaver(Math.random);
  25. // var value1 = saver();
  26. // var value2 = saver();
  27. // value1 === value2;
  28. // var saver2 = makeSaver(() => console.log('saved function called') || [null, undefined, false, '', 0, Math.random()][Math.ceil(Math.random() * 6)]);
  29. // var value3 = saver2();
  30. // var value4 = saver2();
  31. // value3 === value4;
  32. // --------------------------------------------------Final Countdown-------------------------------------------------------------------
  33. // function finalCountdown(seconds) {
  34. // console.log(seconds);
  35. // if(seconds === 1) {
  36. // // console.log('"поехали!"'); // If it is necessary to write it immediately
  37. // // return; // Will write Gagarin's speech without delay
  38. // return setTimeout(() => console.log('"поехали!"'), 1000);
  39. // }
  40. // return setTimeout(finalCountdown, 1000, seconds - 1);
  41. // }
  42. // finalCountdown(5);
  43. // --------------------------------------------------myBind-----------------------------------------------------------------------
  44. function myBind(func, myThis, myArray) {
  45. return function (...arguments) {
  46. let count = 0;
  47. let tempArray = myArray.map((value) =>
  48. (value === undefined ? arguments[count++] : value)
  49. );
  50. // let tempArray;
  51. // tempArray = myArray.map((value) => {
  52. // ( value === undefined ? arguments[count++] : value)
  53. // });
  54. return func.call(myThis, ...tempArray);
  55. }
  56. }
  57. var pow5 = myBind(Math.pow, Math, [undefined, 5])
  58. var cube = myBind(Math.pow, Math, [undefined, 3])
  59. // pow5(2) // => 32, вызывает Math.pow(2,5), соотнесите с [undefined, 5]
  60. // cube(3) // => 27
  61. console.log(pow5(2))
  62. console.log(cube(3))
  63. var chessMin = myBind(Math.min, Math, [undefined, 4, undefined, 5, undefined, 8, undefined, 9])
  64. console.log(chessMin(-1, -5, 3, 15)) // вызывает Math.min(-1, 4, -5, 5, 3, 8, 15, 9), результат -5
  65. var zeroPrompt = myBind(prompt, window, [undefined, "46"])
  66. var someNumber = zeroPrompt("Введите число") // вызывает prompt("Введите число","0")
  67. console.log(myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a', 'c', 'd') === 'abcdef')