unknown před 3 roky
rodič
revize
ad3099cc90
1 změnil soubory, kde provedl 29 přidání a 68 odebrání
  1. 29 68
      javascript/hw.js

+ 29 - 68
javascript/hw.js

@@ -1,67 +1,38 @@
 'use strict';
 
 //Замыкания
-//makeProfileTimer
-//Напишите функцию makeProfileTimer, которая служит для замера времени выполнения другого кода и работает следующим образом:
-//Используйте performance.now()
-// const makeProfileTimer = () => () => performance.now();
-// const timer = makeProfileTimer();
 
-// alert('Замеряем время работы этого alert'); //некий код, время выполнения которого мы хотим измерить с высокой точностью
-// alert(timer()); //alert должен вывести время в микросекундах от выполнения makeProfileTimer до момента вызова timer(),
-// т. е. измерить время выполнения alert
-
-//makeSaver
-//Напишите функцию makeSaver, которая:
-
-// const makeSaver = (fn) => () => fn;
-
-// const saver = makeSaver(Math.random);
-// const value1 = saver();
-// const value2 = saver();
-// console.log(value1 === value2);
-
-// const saver2 = makeSaver(
-// 	() =>
-// 		console.log('saved function called') ||
-// 		[null, undefined, false, '', 0, Math.random()][Math.ceil(Math.random() * 6)]
-// );
-// const value3 = saver2();
-// const value4 = saver2();
-
-// console.log(value3 === value4); // тоже должно быть true
+const makeProfileTimer = () => {
+	const start = performance.now();
+	alert('Замеряем время работы этого alert');
+	return () => performance.now() - start;
+};
+const timer = makeProfileTimer();
+alert(timer());
 
-// const namePrompt = prompt.bind(window, 'Как тебя зовут?');
-// const nameSaver = makeSaver(namePrompt);
-// alert(`Привет! Prompt еще не было!`);
-// alert(
-// 	`Привет ${nameSaver()}. Только что запустился prompt, первый и последний раз`
-// );
-// alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`);
+const makeSaver = (value) => () => value;
+const saver = makeSaver(Math.random);
+const value1 = saver();
+const value2 = saver();
+console.log(value1 === value2, 'value1 === value2');
 
-//Final Countdown
-//Напишите код, который будет делать обратный ежесекундный отсчёт в консоли, используя console.log.
-//Используйте Self Invoked Function для создания замыкания и setTimeout для задержки вывода.Результатом должно быть:
-//   5 //пауза 1 секунда
-4; //пауза 1 секунда
-3; //пауза 1 секунда
-2; //пауза 1 секунда
-1; //пауза 1 секунда
-// ('поехали!');
+const saver2 = makeSaver(
+	() =>
+		console.log('saved function called') ||
+		[null, undefined, false, '', 0, Math.random()][Math.ceil(Math.random() * 6)]
+);
+const value3 = saver2();
+const value4 = saver2();
+console.log(value3 === value4, 'value3 === value4'); // тоже должно быть true
 
-// (function selfCountDown(n) {
-// 	if (n === 0) return;
-// 	setTimeout(() => {
-// 		console.log(n);
-// 		selfCountDown(n - 1);
-// 	}, 1000);
-// })(5);
+(function selfCountDown(n) {
+	if (n === 0) return;
+	setTimeout(() => {
+		console.log(n);
+		selfCountDown(n - 1);
+	}, 1000);
+})(5);
 
-//myBind
-//Изучите встроенную функцию bind, и сделайте свою версию, которая позволит определить "значение по умолчанию"
-//не только для первых параметров, но для любых других, например для степени в Math.pow:
-//Массив, который идет третьим параметром определяет, какие поля должны подменяться значением по умолчанию,
-//а какие - задаваться в последствии(undefined).
 const myBind = function (fnBind, context, settings) {
 	return function (...params) {
 		let i = 0;
@@ -82,12 +53,6 @@ const pow5 = myBind(Math.pow, Math, [undefined, 5]);
 const cube = myBind(Math.pow, Math, [undefined, 3]);
 console.log(pow5(2)); // => 32, вызывает Math.pow(2,5), соотнесите с [undefined, 5]
 console.log(cube(3)); // => 27
-// первый параметр - функция для биндинга значений по умолчанию,
-// второй - this для этой функции, третий - массив, в котором undefined означает
-// параметры, которые должны передаваться при вызове,
-// а другие значения являются значениями по умолчанию:
-// cube возводит число в куб
-
 const chessMin = myBind(Math.min, Math, [
 	undefined,
 	4,
@@ -98,14 +63,10 @@ const chessMin = myBind(Math.min, Math, [
 	undefined,
 	9,
 ]);
-// chessMin(-1, -5, 3, 15); // вызывает Math.min(-1, 4, -5, 5, 3, 8, 15, 9), результат -5
-console.log(chessMin(-1, -5, 3, 15));
 
+console.log(chessMin(-1, -5, 3, 15));
 const zeroPrompt = myBind(prompt, window, [undefined, '0']);
-// аналогично, только теперь задается "0" как текст по умолчанию в prompt,
-// // а текст приглашения пользователя задается при вызове zeroPrompt
-const someNumber = zeroPrompt('Введите число'); // вызывает prompt("Введите число","0")
-
+const someNumber = zeroPrompt('Введите число myBind'); // вызывает prompt("Введите число","0")\
 console.log(
 	myBind((...params) => params.join(''), null, [
 		undefined,