123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- // makeProfileTimer
- function makeProfileTimer() {
- let prevTime = performance.now();
- function changeTime() {
- let nextTime = performance.now();
- return ('Время выполнения alert: ' + (nextTime - prevTime));
- }
- return changeTime;
- }
- let timer = makeProfileTimer()
- alert('Замеряем время работы этого alert');
- alert(timer())
- // or
- function makeProfileTimer() {
- alert('Замеряем время работы этого alert');
- }
- console.time('FirstWay');
- makeProfileTimer();
- console.timeEnd('FirstWay');
- // makeSaver
- function makeSaver(f) {
- let start = false;
- let result;
- return () => {
- if (start === false) {
- result = f();
- start = true;
- }
- return result;
- }
- }
- let nameSarver = makeSaver(() => prompt('Введите имя'))
- alert('Имя еще не спрашивали')
- let name1 = nameSarver()
- alert('Тока шо спросили имя')
- let name2 = nameSarver()
- alert('Два раза спрашивать имя - значит склероз')
- alert('Привет, ' + name1 + ((name1 === name2) ? '. Задача решена' : 'Какая-то дичь'))
- var saver = makeSaver(Math.random)
- var value1 = saver()
- var value2 = saver()
- 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()
- value3 === value4 // тоже должно быть true
- // Final Countdown
- function SelfInvoked() {
- let countdown = 5;
-
- function t() {
- console.log(countdown--);
- setTimeout(() => console.log('поехали!'), 5000);
- if(!countdown)
- clearInterval(timer);
- }
- let timer = setInterval(t, 1000);
- }
- SelfInvoked() // запуск функции
- 5 //пауза 1 секунда
- 4 //пауза 1 секунда
- 3 //пауза 1 секунда
- 2 //пауза 1 секунда
- 1 //пауза 1 секунда
- // поехали!
- // myBind
- // решение
- function myBind (func, context, args) {
- return (...params) => {
- let defaultValue = 0;
- let newArgs = args.map((i) => (i === undefined ? params[defaultValue++] : i));
- return func.call(context, ... newArgs);
- }
- }
- // условие
- var pow5 = myBind(Math.pow, Math, [undefined, 5]) // первый параметр - функция для биндинга значений по умолчанию,
- // второй - this для этой функции, третий - массив, в котором undefined означает
- // параметры, которые должны передаваться при вызове,
- // а другие значения являются значениями по умолчанию:
- var cube = myBind(Math.pow, Math, [undefined, 3]) // cube возводит число в куб
- pow5(2) // => 32, вызывает Math.pow(2,5), соотнесите с [undefined, 5]
- cube(3) // => 27
- var chessMin = myBind(Math.min, Math, [undefined, 4, undefined, 5,undefined, 8,undefined, 9])
- 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")
- myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a','c','d') === 'abcdef'
-
|