script.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // Task makeProfileTimer
  2. // function makeProfileTimer(){
  3. // const t0 = performance.now();
  4. // alert('Замеряем время работы этого alert');
  5. // return function (){
  6. // const t1 = performance.now()
  7. // return t1-t0;
  8. // }
  9. // }
  10. // const timer = makeProfileTimer();
  11. // alert(timer());
  12. // Task makeSaver
  13. // function makeSaver(func){
  14. // let result = null;
  15. // return function() {
  16. // result = ( result === null ? func() : result);
  17. // return result;
  18. // }
  19. // }
  20. // var saver = makeSaver(Math.random);
  21. // var value1 = saver()
  22. // var value2 = saver()
  23. // console.log(value1 === value2) // всегда true
  24. // var saver2 = makeSaver(() => console.log('saved function called') || [null, undefined, false, '', 0, Math.random()][Math.ceil(Math.random()*6)])
  25. // var value3 = saver2()
  26. // var value4 = saver2()
  27. // console.log(value3 === value4) // тоже должно быть true
  28. // let namePrompt = prompt.bind(window, 'Как тебя зовут?')
  29. // let nameSaver = makeSaver(namePrompt)
  30. // alert(`Привет! Prompt еще не было!`)
  31. // alert(`Привет ${nameSaver()}. Только что запустился prompt, первый и последний раз`)
  32. // alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`)
  33. // Task Final countdown
  34. // (function () {
  35. // let sec = 5;
  36. // return function(){
  37. // for(let i = 0; i <= sec; i++){
  38. // setTimeout(()=>{
  39. // console.log(sec === 0 ? "Поехали" : sec);
  40. // sec--;
  41. // }, i * 1000)
  42. // }
  43. // }()
  44. // })();
  45. // Task myBind
  46. function myBind( func, context, arr){
  47. return function(...params){
  48. let i = 0;
  49. const filledArr = arr.map(item => {
  50. if (item){
  51. return item
  52. } else {
  53. i++;
  54. return params[i-1]
  55. }
  56. })
  57. return func.call(context, ...filledArr);
  58. }
  59. }
  60. var pow5 = myBind(Math.pow, Math, [undefined, 5])
  61. var cube = myBind(Math.pow, Math, [undefined, 3])
  62. console.log(pow5(2)) // => 32, вызывает Math.pow(2,5), соотнесите с [undefined, 5]
  63. console.log(cube(3)) // => 27
  64. var chessMin = myBind(Math.min, Math, [undefined, 4, undefined, 5,undefined, 8,undefined, 9])
  65. console.log(chessMin(-1,-5,3,15)) // вызывает Math.min(-1, 4, -5, 5, 3, 8, 15, 9), результат -5
  66. // var zeroPrompt = myBind(prompt, window, [undefined, "0"])
  67. // var someNumber = zeroPrompt("Введите число")
  68. console.log(myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a','c','d') === 'abcdef')