// Замыкания // makeProfileTimer---------------------------------------------------------------------------------------------------------------------; function makeProfileTimer() { t1 = performance.now(); confirm("Are you sure?"); t2 = performance.now(); return alert( "Call to confirm function took" + " " + (t2 - t1) + " " + "milliseconds" ); } var timer = makeProfileTimer(); alert(timer()); // makeSaver----------------------------------------------------------------------------------------------------------------------------; function makeSaver(callable) { let res, executed = !1; return function () { return executed ? res : ((executed = !0), (res = callable())); }; } var saver = makeSaver(Math.random); value1 = saver(); value2 = saver(); console.log(value1 === value2); 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; let namePrompt = prompt.bind(window, "Как тебя зовут?"); let nameSaver = makeSaver(namePrompt); alert(`Привет! Prompt еще не было!`); alert( `Привет ${nameSaver()}. Только что запустился prompt, первый и последний раз` ); alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`); // Final Countdown----------------------------------------------------------------------------------------------------------------------; const messages = [5, 4, 3, 2, 1, "Go"]; for (let i = 0; i < messages.length; i++) { setTimeout(function () { console.log(messages[i]); }, 1000 * i); } // myBind-------------------------------------------------------------------------------------------------------------------------------; function myBind(func, context, bindArgs) { function wrapper() { var args = Object.assign(bindArgs, arguments); return func.apply(context, args); } return wrapper; } var pow5 = myBind(Math.pow, Math, [undefined, 5]); var cube = myBind(Math.pow, Math, [undefined, 3]); alert(pow5(2)); alert(cube(3)); var zeroPrompt = myBind(prompt, window, [undefined, "0"]); var someNumber = zeroPrompt("Введите число"); alert(someNumber);