// Task makeProfileTimer // function makeProfileTimer(){ // const t0 = performance.now(); // alert('Замеряем время работы этого alert'); // return function (){ // const t1 = performance.now() // return t1-t0; // } // } // const timer = makeProfileTimer(); // alert(timer()); // Task makeSaver // function makeSaver(func){ // let result = null; // return function() { // result = ( result === null ? func() : result); // return result; // } // } // var saver = makeSaver(Math.random); // var value1 = saver() // var value2 = saver() // console.log(value1 === value2) // всегда true // var saver2 = makeSaver(() => console.log('saved function called') || [null, undefined, false, '', 0, Math.random()][Math.ceil(Math.random()*6)]) // var value3 = saver2() // var value4 = saver2() // console.log(value3 === value4) // тоже должно быть true // let namePrompt = prompt.bind(window, 'Как тебя зовут?') // let nameSaver = makeSaver(namePrompt) // alert(`Привет! Prompt еще не было!`) // alert(`Привет ${nameSaver()}. Только что запустился prompt, первый и последний раз`) // alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`) // Task Final countdown // (function () { // let sec = 5; // return function(){ // for(let i = 0; i <= sec; i++){ // setTimeout(()=>{ // console.log(sec === 0 ? "Поехали" : sec); // sec--; // }, i * 1000) // } // }() // })(); // Task myBind function myBind( func, context, arr){ return function(...params){ let i = 0; const filledArr = arr.map(item => { if (item){ return item } else { i++; return params[i-1] } }) return func.call(context, ...filledArr); } } var pow5 = myBind(Math.pow, Math, [undefined, 5]) var cube = myBind(Math.pow, Math, [undefined, 3]) console.log(pow5(2)) // => 32, вызывает Math.pow(2,5), соотнесите с [undefined, 5] console.log(cube(3)) // => 27 var chessMin = myBind(Math.min, Math, [undefined, 4, undefined, 5,undefined, 8,undefined, 9]) console.log(chessMin(-1,-5,3,15)) // вызывает Math.min(-1, 4, -5, 5, 3, 8, 15, 9), результат -5 // var zeroPrompt = myBind(prompt, window, [undefined, "0"]) // var someNumber = zeroPrompt("Введите число") console.log(myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a','c','d') === 'abcdef')