// --------------------------------------------------makeProfileTimer------------------------------------------------------------------- // function makeProfileTimer() { // let startTime = performance.now(); // return function () { // return performance.now() - startTime; // } // }; // const timer = makeProfileTimer(); // alert('Замеряем время работы этого alert'); // alert(`Time for this alert running is: ${timer()}`); // --------------------------------------------------makeSaver------------------------------------------------------------------- // function makeSaver(someFunc) { // let firstRun = true; // let saveResult; // return function() { // if(firstRun) { // saveResult = someFunc(); // firstRun = false; // console.log(`Result is saved: ${saveResult}`); // } // return saveResult; // } // } // var saver = makeSaver(Math.random); // var value1 = saver(); // var value2 = saver(); // value1 === value2; // 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(); // value3 === value4; // --------------------------------------------------Final Countdown------------------------------------------------------------------- // function finalCountdown(seconds) { // console.log(seconds); // if(seconds === 1) { // // console.log('"поехали!"'); // If it is necessary to write it immediately // // return; // Will write Gagarin's speech without delay // return setTimeout(() => console.log('"поехали!"'), 1000); // } // return setTimeout(finalCountdown, 1000, seconds - 1); // } // finalCountdown(5); // --------------------------------------------------myBind----------------------------------------------------------------------- function myBind(func, myThis, myArray) { return function (...arguments) { let count = 0; let tempArray = myArray.map((value) => (value === undefined ? arguments[count++] : value) ); // let tempArray; // tempArray = myArray.map((value) => { // ( value === undefined ? arguments[count++] : value) // }); return func.call(myThis, ...tempArray); } } var pow5 = myBind(Math.pow, Math, [undefined, 5]) var cube = myBind(Math.pow, Math, [undefined, 3]) // pow5(2) // => 32, вызывает Math.pow(2,5), соотнесите с [undefined, 5] // cube(3) // => 27 console.log(pow5(2)) console.log(cube(3)) 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, "46"]) var someNumber = zeroPrompt("Введите число") // вызывает prompt("Введите число","0") console.log(myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a', 'c', 'd') === 'abcdef')