//1.makeProfileTimer
// function makeProfileTimer(){
//     let time = performance.now();
//     return function sec(){
//         return time * 1000;
//     };
// }
// let timer = makeProfileTimer();
// alert('Замеряем время работы этого alert'); 
// alert(timer());

//2.makeSaver
// function makeSaver (fn){
//     return function(){
//         fn();
//     }
// }

// function al(){
//     let namePrompt = prompt.bind(window, 'Как тебя зовут?');
//     let nameSaver = makeSaver(namePrompt);

//     alert(`Привет! Prompt еще не было!`);
//     alert(`Привет ${nameSaver()}. Только что запустился prompt, первый и последний раз`);
//     alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`);
// }

// al();

// let saver = makeSaver(Math.random);
// let value1 = saver();
// let value2 = saver();

// console.log(value1 === value2);

// let saver2 = makeSaver(() => console.log('saved function called') || [null, undefined, false, '', 0, Math.random()][Math.ceil(Math.random()*6)]);
// let value3 = saver2();
// let value4 = saver2();

// console.log(value3 === value4);

//3.Final Countdown
// let counter = 5;

// function selfInvoked(){
//     console.log(counter);
//     let timer = setTimeout(() => {
//         selfInvoked()
//     }, 1000);
    
//     if(counter > 1){
//         return function (){
//             return counter--;
//         }();
//     }
//     clearInterval(timer);

//     if(counter === 1){
//         console.log('поехали!');
//     }
// }
// selfInvoked();

//4.myBind
// function myBind(fnBind, context, fn){
//     return function(...args){
//         let i = 0;
//         let array = fn.map((arr) => {
// 			if (arr === undefined) {
// 				const argsEl = args[i];
// 				i += 1;
// 				return argsEl;
// 			} else {
// 				return arr;
// 			}
// 		});
// 		return fnBind.apply(context, array);
// 	};
// }

// let pow5 = myBind(Math.pow, Math, [undefined, 5]);
// let cube = myBind(Math.pow, Math, [undefined, 3]);
// let chessMin = myBind(Math.min, Math, [undefined, 4, undefined, 5,undefined, 8,undefined, 9]);

// console.log(pow5(2));
// console.log(cube(3));
// console.log(chessMin(-1, -5, 3, 15));

// let zeroPrompt = myBind(prompt, window, [undefined, "0"]); 
// let someNumber = zeroPrompt("Введите число");

// console.log(myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a','c','d') === 'abcdef');