1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- //1 вариант
- function myTimer() {
- let time = performance.now();
- return function() {
- time = performance.now() - time;
- return ((time / 1000).toFixed(3))
- }
- }
- //2 вариант
- function myTimer2() {
- const start = new Date().getTime();
- return function() {
- const end = new Date().getTime();
- return ((end - start) / 1000)
- }
- }
- //var timer = myTimer()
- //alert('Замеряем время работы этого alert'); //некий код, время выполнения которого мы хотим измерить с высокой точностью
- //alert(timer()); //alert должен вывести время в микросекундах от выполнения makeProfileTimer до момента вызова timer(),
- // // т. е. измерить время выполнения alert
- //1 вариант
- function makeSaver(func) {
- let result;
- return function() {
- result = func();
- }
- }
- // 2 вариант через стрелочную функцию
- var makeSaver2 = (makeSaver2) => () => makeSaver2()
- // var saver = func(Math.random) //создает функцию-хранилище результата переданной в качестве параметра функции (Math.random
- // // в примере). На этом этапе Math.random НЕ вызывается
- // var value1 = saver() //saver вызывает переданную в makeSaver функцию, запоминает результат и возвращает его
- // var value2 = saver() //saver в дальнейшем просто хранит результат функции, и более НЕ вызывает переданную
- // //в makeSaver функцию;
- // 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()
- // let a = value3 === value4 // тоже должно быть true
- // console.log(a);
- //Final Countdown Self Invoked Function
- let i = 6;
- (function timer() {
- if (--i < 1) {
- console.log('поехали')
- return
- } else {
- setTimeout(() => {
- console.log(i);
- timer()
- }, 1000);
- }
- })();
- //my bind
- function myBind(func, context, bindArguments) {
- return function(...args) {
- let newArgs = [];
- let iter = 0;
- for (let i in bindArguments) {
- //если в параметрах
- //по умолчани есть undefined,
- // пушим полученные параметры вместо него
- if (bindArguments[i] === undefined) {
- newArgs.push(args[iter])
- iter++
- } else {
- newArgs.push(bindArguments[i])
- }
- }
- return func.apply(context, newArgs);
- }
- }
- // var pow5 = myBind(Math.pow, Math, [undefined, 5])
- // console.log(pow5(2))
- // 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])
- // console.log(chessMin(-1, -5, 3, 15)) // вызывает Math.min(-1, 4, -5, 5, 3, 8, 15, 9), результат -5
- // let res = myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a', 'c', 'd') === 'abcdef'
- // console.log(res)
|