index.html 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Замыкание</title>
  6. </head>
  7. <body>
  8. <script>
  9. //---------makeProfileTimer
  10. function makeProfileTimer(){
  11. let time1=performance.now();
  12. return function(){
  13. let time2=performance.now();
  14. return time2-time1;
  15. //alert(time2-time1);
  16. }
  17. }
  18. /*function fib(n){
  19. if(n==1||n==2){
  20. return 1;
  21. }else{
  22. return fib(n-1)+fib(n-2);
  23. }
  24. }*/
  25. //var timer=makeProfileTimer();
  26. //alert('Замеряем время работы этого alert');
  27. //alert(fib(10));
  28. //alert(timer());
  29. //-----------makeSaver
  30. function makeSaver(fn){
  31. let called=false;
  32. let x=fn;
  33. let a;
  34. return function(){
  35. if(!called){
  36. a=x();
  37. called=true;
  38. return a;
  39. }else{
  40. return a;
  41. }
  42. }
  43. }
  44. var saver = makeSaver(Math.random);
  45. var value1 = saver();
  46. var value2 = saver();
  47. console.log(value1+" "+value2);
  48. console.log(value1 === value2); //true
  49. var saver2 = makeSaver(() => console.log('saved function called') || [null, undefined, false, '', 0, Math.random()][Math.ceil(Math.random()*6)]);
  50. var value3 = saver2();
  51. var value4 = saver2();
  52. console.log(value3 === value4); //true
  53. let namePrompt = prompt.bind(window, 'Как тебя зовут?')
  54. let nameSaver = makeSaver(namePrompt)
  55. alert(`Привет! Prompt еще не было!`)
  56. alert(`Привет ${nameSaver()}. Только что запустился prompt, первый и последний раз`)
  57. alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`)
  58. //-----------Final Countdown
  59. /*(function count(){
  60. let x=5;
  61. let y=setInterval(function(){
  62. console.log(x);
  63. if(x==1){
  64. clearInterval(y);
  65. console.log('поехали');
  66. }
  67. x--;
  68. },1000)
  69. })();*/
  70. //------------myBind
  71. function myBind(fn,context,args){
  72. //return function(){
  73. //let args2=Object.assign(args,arguments);
  74. //return fn.call(context,...args2);
  75. //}
  76. let arr=[...args];
  77. return function(){
  78. arguments.__proto__=Array.prototype;
  79. for(let i=0;i<arr.length;i++){
  80. if(arr[i]===undefined){
  81. arr[i]=arguments.shift();
  82. }
  83. }
  84. return fn.apply(context,arr);
  85. }
  86. }
  87. /*var pow5 = myBind(Math.pow, Math, [undefined, 5]);
  88. var cube = myBind(Math.pow, Math, [undefined, 3]);
  89. console.log(pow5(2)); //32
  90. console.log(cube(3)); //27
  91. var chessMin = myBind(Math.min, Math, [undefined, 4, undefined, 5,undefined, 8,undefined, 9]);
  92. console.log(chessMin(-1,-5,3,15)); //-5
  93. var zeroPrompt = myBind(prompt, window, [undefined, "0"]);
  94. var someNumber = zeroPrompt("Введите число");
  95. console.log(someNumber); //0
  96. console.log(myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a','c','d') === 'abcdef'); //true*/
  97. </script>
  98. </body>
  99. </html>