script.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. function taskMakeProfileTimer() {
  2. function makeProfileTimer() {
  3. let startTime = performance.now();
  4. function calc() {
  5. let endTime = performance.now();
  6. let result = endTime - startTime;
  7. return result
  8. }
  9. return calc;
  10. }
  11. let timer = makeProfileTimer()
  12. alert('Время выполнения');
  13. alert(timer());
  14. }
  15. // taskMakeProfileTimer()
  16. function taskMakeSaver() {
  17. function makeSaver(fn) {
  18. let result;
  19. let doFunc = true;
  20. return function () {
  21. if (doFunc) {
  22. result = fn();
  23. doFunc = false;
  24. }
  25. return result;
  26. }
  27. }
  28. let nameSaver = makeSaver(() => prompt('Введите свое имя!'))
  29. alert('Имя еще не спрашивали!')
  30. let name1 = nameSaver()
  31. alert('Только что спросили имя!')
  32. let name2 = nameSaver()
  33. alert("Второй раз спрашиваете?")
  34. alert("Привет , " + nameSaver() + (nameSaver() === nameSaver() ? ". Готово!" : 'Какой-то бред!'))
  35. }
  36. // taskMakeSaver()
  37. function finalCountdown(i) {
  38. return setTimeout(function () {
  39. if (i === 0) {
  40. console.log('Поехали!')
  41. } else {
  42. console.log(i)
  43. return finalCountdown(--i)
  44. }
  45. }, 1000)
  46. }
  47. // finalCountdown(5)
  48. function myBind(fn, context, arr) {
  49. return (...params) => {
  50. let indexParam = 0;
  51. let newArray = arr.map((i) => (i === undefined ? params[indexParam++] : i))
  52. return fn.call(context, ...newArray)
  53. }
  54. }
  55. let pow5 = myBind(Math.pow, Math, [undefined, 5])
  56. let cube = myBind(Math.pow, Math, [undefined, 3])
  57. pow5(2) // => 32,
  58. cube(3) // => 27
  59. let chessMin = myBind(Math.min, Math, [undefined, 4, undefined, 5, undefined, 8, undefined, 9])
  60. chessMin(-1, -5, 3, 15) // вызывает Math.min(-1, 4, -5, 5, 3, 8, 15, 9), результат -5
  61. let zeroPrompt = myBind(prompt, window, [undefined, "0"])
  62. let someNumber = zeroPrompt("Введите число")
  63. myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a', 'c', 'd') === 'abcdef'