123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- function makeProfileTimer() {
- const t0 = performance.now()
- return () => {
- const t1 = performance.now()
- return t1 - t0
- }
- }
- var timer = makeProfileTimer()
- alert('Замеряем время работы этого alert')
- alert(timer())
- {
- function makeSaver (f) {
- const fResult = f()
- function result(){
- return fResult
- }
- return result
- }
- var saver = makeSaver(Math.random)
- var value1 = saver()
- var value2 = saver()
-
- 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 был только один раз`)
- }
- {
- function sum(a, b, c, d) { return a + b + c + d }
- function myBind(func, context, args) {
- return function funcResult(...lostArgs) {
- let combinedArgs = []
- for (let i of args) {
- if (i === undefined) {
- combinedArgs.push(lostArgs[0])
- lostArgs.shift()
- } else {
- combinedArgs.push(i)
- }
- }
- return func.apply(context, combinedArgs)
- }
- }
- const resultBind = myBind(sum, null, [, 2, , 2])
- console.log(resultBind(2, 2))
- var pow5 = myBind(Math.pow, Math, [, 5])
-
-
-
- var cube = myBind(Math.pow, Math, [, 3])
- console.log(pow5(2))
- console.log(cube(3))
- var chessMin = myBind(Math.min, Math, [, 4, , 5,, 8,, 9])
- console.log(chessMin(-1,-5,3,15))
- var zeroPrompt = myBind(prompt, window, [undefined, "0"])
-
- var someNumber = zeroPrompt("Введите число")
- const bindedJoiner = myBind((...params) => params.join(''), null, [, 'b', , , 'e', 'f'])
- console.log(bindedJoiner('a','c','d') === 'abcdef')
- console.log(bindedJoiner('1','2','3') === '1b23ef')
- function checkResult(original, validator){
-
- function wrapper(...params){
- let result = original(...params)
- if (!validator(result)) {
- return wrapper(...params)
- }
- return result
- }
-
- return wrapper
- }
- const numberPrompt = checkResult(prompt, x => !isNaN(+x))
- let number = +numberPrompt("Введите число", "0")
- const gamePrompt = checkResult(prompt, x => ['камень', 'ножницы', 'бумага'].includes(x.toLowerCase()))
- const turn = gamePrompt("Введите что то из списка: 'камень', 'ножницы', 'бумага'")
- const randomHigh = checkResult(Math.random, x => x >= 0.5 && x <=1 ? true : false )
- const alwaysSayYes = checkResult(confirm, x => x)
- const respectMe = checkResult(person, validatorCredentials)
- function person() {
- let trimAndCapitalize = (str) => {
- if (str) {
- return str.trim()[0].toUpperCase() + str.trim().slice(1).toLowerCase()
- }
- }
- let surname = trimAndCapitalize(
- prompt('введите вашу фамилию.\nMожете добавить пару пробелов в конце или начале. Написать с маленькой буквы или даже сделать пару букв в середине фамилии большими, я все поправлю!')
- );
- let name = trimAndCapitalize(
- prompt('введите ваше имя')
- );
- let fatherName = trimAndCapitalize(
- prompt('введите ваше отчество')
- );
- let fullName = surname + " " + name + " " + fatherName;
- return {
- name,
- surname,
- fatherName,
- fullName
- }
- }
- function validatorCredentials({ name, surname, fatherName }) {
- if (!name || !isNaN(+name)) return false
- if (!surname || !isNaN(+surname)) return false
- if (!fatherName || !isNaN(+fatherName)) return false
- return true
- }
- }
|