1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- //makeProfileTimer
- function makeProfileTimer() {
- let prev = performance.now();
- return function () {
- let next = performance.now();
- return ("Время выполнения: " + (next - prev));
- }
- }
- //makeSaver
- function makeSaver(el) {
- let result;
- let doFunc = true;
- return function () {
- if (doFunc) {
- result = el();
- doFunc = false;
- }
- return result;
- }
- }
- 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 finalCountdown(lastCountNumber) { //параметр число с которого начинается обратный отсчёт
- if (lastCountNumber >= 0) {
- setTimeout((function () {
- lastCountNumber === 0 ? console.log("поехали!") : console.log(lastCountNumber);
- finalCountdown(lastCountNumber - 1);
- }), 1000)
- }
- }
- //myBind
- function myBind(func, context, ...args) {
- let argsCopy = args;
- argsCopy = argsCopy.flat();
- return function (...args2) {
- let j = 0;
- for (let i = 0; i < argsCopy.length; i++) {
- if (argsCopy[i] === undefined) {
- argsCopy[i] = args2[j]
- j++;
- }
- }
- return func.call(context, ...argsCopy)
- }
- }
- var pow5 = myBind(Math.pow, Math, [undefined, 5])
- var cube = myBind(Math.pow, Math, [undefined, 3])
- pow5(2) // => 32, вызывает Math.pow(2,5)
- cube(3) // => 27, вызывает Math.pow(3,3)
- 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"])
- var someNumber = zeroPrompt("Введите число") // вызывает prompt("Введите число","0")
- myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a', 'c', 'd') === 'abcdef' //true
|