// makeProfileTimer // Напишите функцию makeProfileTimer, которая служит для замера времени выполнения другого кода // function makeProfileTimer() { // let t0 = performance.now(); // alert('Замеряем время работы этого alert') // var t1 = performance.now(); // let timer = () => t1 - t0; // alert(timer()) // } // makeProfileTimer(); // makeSaver____________________________________________ // function makeSaver(fValue) { // let some = fValue // return () => { // function checked() { // some = some() // } // if(typeof some === 'function') checked() // return some // } // } // var saver = makeSaver(Math.random); //создает функцию-хранилище результата переданной в качестве параметра функции (Math.random // // в примере). На этом этапе Math.random НЕ вызывается // var value1 = saver(); //saver вызывает переданную в makeSaver функцию, запоминает результат и возвращает его // var value2 = saver(); //saver в дальнейшем просто хранит результат функции, и более НЕ вызывает переданную // //в makeSaver функцию; // 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 был только один раз`); // Final Countdown___________________________________ // function SelfInvoked (value) { // console.log(value); // value = value -1; // if (value === 0) { // setTimeout(SelfInvoked, 1000, 'поехали!'); // return; // } // if(value) { // return setTimeout(SelfInvoked, 1000, value); // } // return; // } // SelfInvoked(5); // myBind_____________________________________________________ // function myBind (funcBind, context, mass) { // return function (...arg) { // let numberOfValue = 0; // for (let i = 0; i < mass.length; i++) { // if (!mass[i]) { // mass[i] = arg[numberOfValue]; // numberOfValue++; // } // } // let result = funcBind.apply(context, mass) // return result; // } // } // var pow5 = myBind(Math.pow, Math, [undefined, 5]) // первый параметр - функция для биндинга значений по умолчанию, // // второй - this для этой функции, третий - массив, в котором undefined означает // // параметры, которые должны передаваться при вызове, // // а другие значения являются значениями по умолчанию: // var cube = myBind(Math.pow, Math, [undefined, 3]) // cube возводит число в куб // 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, "0"]) // аналогично, только теперь задается "0" как текст по умолчанию в prompt, // // а текст приглашения пользователя задается при вызове zeroPrompt // var someNumber = zeroPrompt("Введите число") // вызывает prompt("Введите число","0") // console.log (myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a','c','d') === 'abcdef')