Browse Source

homework09 update done

holevchuk.evgeny 1 year ago
parent
commit
349ccb5417
3 changed files with 27 additions and 13 deletions
  1. 13 8
      hw09/makeProfileTimer.js
  2. 3 2
      hw09/makeSaver.js
  3. 11 3
      hw09/myBind.js

+ 13 - 8
hw09/makeProfileTimer.js

@@ -1,12 +1,17 @@
-const makeProfileTimer = func => {
+const makeProfileTimer = () => {
 	let start = performance.now();
-	func();
-	let stop = performance.now();
-	return stop - start;
+	return () => {
+		let stop = performance.now();
+		return stop - start;
+	}
 }
 
-const alertFunc = () => {
-	alert('Замеряем время работы этого alert');
-}
+console.log(makeProfileTimer())
+
+let timer = makeProfileTimer();
+
+console.log(timer)
+alert('Замеряем время работы этого alert');
+alert(timer());
 
-alert(`Вызов функции 'alertFunc' занял ${(makeProfileTimer(alertFunc)).toFixed(0)} миллисекунд`);
+console.log(timer())

+ 3 - 2
hw09/makeSaver.js

@@ -1,10 +1,11 @@
 const makeSaver = functionParam => {
 	let result;
+	let runned = false;
 
 	return (...args) => {
-		if(functionParam) {
+		if(!runned) {
 			result = functionParam.apply(null, args);
-			functionParam = null;
+			runned = true;
 		}
 
 		return result;

+ 11 - 3
hw09/myBind.js

@@ -1,6 +1,11 @@
 const myBind = (boundTargetFunction, boundThis, boundArguments) => {
 	return (...newBoundArguments) => {
-		return boundTargetFunction.apply(boundThis, newBoundArguments.concat(boundArguments[1]));
+		const iterator = newBoundArguments.values();
+		let updatedArr = [];
+		boundArguments.forEach((element, index, thisArr) => {
+			element === undefined ? updatedArr.push(iterator.next().value) : updatedArr.push(thisArr[index]);
+		});
+		return boundTargetFunction.apply(boundThis, updatedArr);
 	}
 }
 
@@ -10,9 +15,12 @@ let cube = myBind(Math.pow, Math, [undefined, 3]);
 console.log(pow5(2)); //32
 console.log(cube(3)); //27
 
-var chessMin = myBind(Math.min, Math, [undefined, 4, undefined, 5,undefined, 8,undefined, 9])
+let chessMin = myBind(Math.min, Math, [undefined, 4, undefined, 5,undefined, 8,undefined, 9])
 console.log(chessMin(-1,-5,3,15)); //-5
 
 
 let zeroPrompt = myBind(prompt, window, [undefined, "0"]);
-let someNumber = zeroPrompt("Введите число"); // вызывает prompt("Введите число","0")
+let someNumber = zeroPrompt("Введите число"); // вызывает prompt("Введите число","0")
+
+let joinStr = myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a','c','d')
+console.log(joinStr) // abcdef