Browse Source

homework9 done

holevchuk.evgeny 1 year ago
parent
commit
0a1ed0759f
4 changed files with 83 additions and 0 deletions
  1. 22 0
      hw09/finalCountdown.js
  2. 12 0
      hw09/makeProfileTimer.js
  3. 31 0
      hw09/makeSaver.js
  4. 18 0
      hw09/myBind.js

+ 22 - 0
hw09/finalCountdown.js

@@ -0,0 +1,22 @@
+(function () {
+	let counter = 0;
+
+	const countdown = () => {
+		let inner_timeout = setTimeout(countdown, 1000);
+		if (counter === 5) {
+			clearTimeout(inner_timeout);
+		}
+		console.log(counter === 5 ? console.log("поехали!") : 5 - counter);
+		counter++
+	}
+
+	setTimeout(countdown, 1000);
+})();
+
+// или
+
+for (let i = 0; i <= 5; ++i) {
+	setTimeout(() => {
+		i === 5 ? console.log("поехали!") : console.log(5 - i);
+	}, 1000 * i);
+}

+ 12 - 0
hw09/makeProfileTimer.js

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

+ 31 - 0
hw09/makeSaver.js

@@ -0,0 +1,31 @@
+const makeSaver = functionParam => {
+	let result;
+
+	return (...args) => {
+		if(functionParam) {
+			result = functionParam.apply(null, args);
+			functionParam = null;
+		}
+
+		return result;
+	};
+}
+
+let saver = makeSaver(Math.random);
+
+let value1 = saver();
+let value2 = saver();
+
+console.log(value1 === value2); // true
+
+let saver2 = makeSaver(() => console.log('saved function called') || [null, undefined, false, '', 0, Math.random()][Math.ceil(Math.random()*6)]); //saved function called
+let value3 = saver2();
+let value4 = saver2();
+
+console.log(value3 === value4); // true
+
+let namePrompt = prompt.bind(window, 'Как тебя зовут?');
+let nameSaver = makeSaver(namePrompt);
+alert(`Привет! Prompt еще не было!`);
+alert(`Привет ${nameSaver()}. Только что запустился prompt, первый и последний раз`);
+alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`);

+ 18 - 0
hw09/myBind.js

@@ -0,0 +1,18 @@
+const myBind = (boundTargetFunction, boundThis, boundArguments) => {
+	return (...newBoundArguments) => {
+		return boundTargetFunction.apply(boundThis, newBoundArguments.concat(boundArguments[1]));
+	}
+}
+
+let pow5 = myBind(Math.pow, Math, [undefined, 5]);
+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])
+console.log(chessMin(-1,-5,3,15)); //-5
+
+
+let zeroPrompt = myBind(prompt, window, [undefined, "0"]);
+let someNumber = zeroPrompt("Введите число"); // вызывает prompt("Введите число","0")