scriptClosures1.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. // makeProfileTimer
  2. // Напишите функцию makeProfileTimer, которая служит для замера времени выполнения другого кода
  3. // function makeProfileTimer() {
  4. // let t0 = performance.now();
  5. // alert('Замеряем время работы этого alert')
  6. // var t1 = performance.now();
  7. // let timer = () => t1 - t0;
  8. // alert(timer())
  9. // }
  10. // makeProfileTimer();
  11. // makeSaver____________________________________________
  12. // function makeSaver(fValue) {
  13. // let some = fValue
  14. // return () => {
  15. // function checked() {
  16. // some = some()
  17. // }
  18. // if(typeof some === 'function') checked()
  19. // return some
  20. // }
  21. // }
  22. // var saver = makeSaver(Math.random); //создает функцию-хранилище результата переданной в качестве параметра функции (Math.random
  23. // // в примере). На этом этапе Math.random НЕ вызывается
  24. // var value1 = saver(); //saver вызывает переданную в makeSaver функцию, запоминает результат и возвращает его
  25. // var value2 = saver(); //saver в дальнейшем просто хранит результат функции, и более НЕ вызывает переданную
  26. // //в makeSaver функцию;
  27. // console.log(value1 === value2); // всегда true
  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. // console.log(value3 === value4); // тоже должно быть true
  32. // let namePrompt = prompt.bind(window, 'Как тебя зовут?');
  33. // let nameSaver = makeSaver(namePrompt);
  34. // alert(`Привет! Prompt еще не было!`);
  35. // alert(`Привет ${nameSaver()}. Только что запустился prompt, первый и последний раз`);
  36. // alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`);
  37. // Final Countdown___________________________________
  38. // function SelfInvoked (value) {
  39. // console.log(value);
  40. // value = value -1;
  41. // if (value === 0) {
  42. // setTimeout(SelfInvoked, 1000, 'поехали!');
  43. // return;
  44. // }
  45. // if(value) {
  46. // return setTimeout(SelfInvoked, 1000, value);
  47. // }
  48. // return;
  49. // }
  50. // SelfInvoked(5);
  51. // myBind_____________________________________________________
  52. // function myBind (funcBind, context, mass) {
  53. // return function (...arg) {
  54. // let numberOfValue = 0;
  55. // for (let i = 0; i < mass.length; i++) {
  56. // if (!mass[i]) {
  57. // mass[i] = arg[numberOfValue];
  58. // numberOfValue++;
  59. // }
  60. // }
  61. // let result = funcBind.apply(context, mass)
  62. // return result;
  63. // }
  64. // }
  65. // var pow5 = myBind(Math.pow, Math, [undefined, 5]) // первый параметр - функция для биндинга значений по умолчанию,
  66. // // второй - this для этой функции, третий - массив, в котором undefined означает
  67. // // параметры, которые должны передаваться при вызове,
  68. // // а другие значения являются значениями по умолчанию:
  69. // var cube = myBind(Math.pow, Math, [undefined, 3]) // cube возводит число в куб
  70. // console.log(pow5(2))
  71. // console.log(cube(3))
  72. // var chessMin = myBind(Math.min, Math, [undefined, 4, undefined, 5,undefined, 8,undefined, 9])
  73. // console.log(chessMin(-1,-5,3,15)) // вызывает Math.min(-1, 4, -5, 5, 3, 8, 15, 9), результат -5
  74. // var zeroPrompt = myBind(prompt, window, [undefined, "0"]) // аналогично, только теперь задается "0" как текст по умолчанию в prompt,
  75. // // а текст приглашения пользователя задается при вызове zeroPrompt
  76. // var someNumber = zeroPrompt("Введите число") // вызывает prompt("Введите число","0")
  77. // console.log (myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a','c','d') === 'abcdef')