1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- // ДЗ: Замыкания
- // задание 1 makeProfileTimer
- {
- function makeProfileTimer() {
- const startTime = performance.now();
- return function () {
- return performance.now() - startTime;
- };
- }
- }
- {
- // использование функции
- var timer = makeProfileTimer();
- alert('Замеряем время работы этого alert');
- alert(timer() + ' микросекунд');
- }
- // задание 2 makeSaver
- {
- function makeSaver(func) {
- let savedValue;
- let hasSavedValue = false;
- return function () {
- if (!hasSavedValue) {
- savedValue = func();
- hasSavedValue = true;
- }
- return savedValue;
- };
- }
- }
- // задание 3 моя привязка
- {
- function myBind(func, thisArg, defaultArgs) {
- return function (...args) {
- let finalArgs = [];
- for (let i = 0; i < defaultArgs.length; i++) {
- if (defaultArgs[i] === undefined) {
- finalArgs.push(args[0]);
- args.shift();
- } else {
- finalArgs.push(defaultArgs[i]);
- }
- }
- finalArgs = [...finalArgs, ...args];
- return func.apply(thisArg, finalArgs);
- };
- }
- }
- // задание 4 проверить результат
- {
- function checkResult(original, validator) {
- return function (...params) {
- let result = original(...params);
- while (!validator(result)) {
- result = original(...params);
- }
- return result;
- };
- }
- }
- {
- const randomHigh = checkResult(Math.random, (x) => x >= 0.5 && x <= 1);
- const alwaysSayYes = checkResult(confirm, (x) => x === true);
- const respectMe = checkResult(
- () => {
- const name = prompt('Как Вас зовут?', '');
- const age = prompt('Сколько Вам лет?', '');
- const profession = prompt('Кем Вы работаете?', '');
- return { name, age, profession };
- },
- (x) => x.name && x.age && x.profession,
- );
- }
|