index.js 2.3 KB

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