1. Создайте функцию которая бы умела делать:

minus(10)(6); // 4

minus(5)(6); // -1

minus(10)(); // 10

minus()(6); // -6

minus()(); // 0

Подсказка, функция minus должна возвращать другую функцию.

function  minus(n = 0){
       return function(x = 0){
        return n - x;
    }
}

console.log(minus(10)(6));
console.log(minus(5)(6));
console.log(minus(10)());
console.log(minus()(6));
console.log(minus()());
  1. Реализовать функцию, которая умножает и умеет запоминать возвращаемый результат между вызовами:

function multiplyMaker ...

const multiply = multiplyMaker(2);

multiply(2); // 4 (2 * 2)

multiply(1); // 4 (4 * 1)

multiply(3); // 12 (4 * 3)

multiply(10); // 120 (12 * 10)

function multiplyMaker(value){
    let x = value;
    return function(n){
        x *= n;
        return x;
    }
}
const multiply = multiplyMaker(2);

console.log(multiply(2));
console.log(multiply(1));
console.log(multiply(3));
console.log(multiply(10));
  1. Реализовать модуль, который работает со строкой и имеет методы:

a. установить строку

i. если передано пустое значение, то установить пустую строку

ii. если передано число, число привести к строке

b. получить строку

c. получить длину строки

d. получить строку-перевертыш

Пример:

модуль.установитьСтроку(‘abcde’);

модуль.получитьСтроку(); // ‘abcde’

модуль.получитьДлину(); // 5

function myString() {
  let str = '';
  return {

          strLength(str) {
            return str.length;
          },
          strReturn() {
            return str;
          },
          strSet(x) {
           str = x;
            return true;
          },
          strReverce(x) {
           str = x;
            return return str.split('').reverse().join('');
          },
    }

  }

var mystr = myString();
console.log(mystr.strLength('abcde')); 
console.log(mystr.strSet('abcde')); 
console.log(mystr.strReturn()); 

Пример преподавателя

const strModule = (function (){
  let str = '';

  function setStr(val = '') {
    str = String(val);
  }

  function getStr() {
    return str;
  }

  function getStrLength() {
    return str.length;
  }

  function getReverseStr() {
    return str.split('').reverse().join('');
  }

  return {
    setStr,
    getStr,
    getStrLength,
    getReverseStr
  }
}());
  1. Создайте модуль “калькулятор”, который умеет складывать, умножать, вычитать, делить и возводить в степень. Конечное значение округлить до двух знаков после точки (значение должно храниться в обычной переменной, не в this).

модуль.установитьЗначение(10); // значение = 10 модуль.прибавить(5); // значение += 5 модуль.умножить(2); // значение *= 2 модуль.узнатьЗначение(); // вывести в консоль 30 (здесь надо округлить)

Также можно вызывать методы цепочкой:

модуль.установитьЗначение(10).вСтепень(2).узнатьЗначение(); // 100

function myCalc() {
  let res = 0;
  return {

          resSet(x) {
            res = x;
            return res;
          },
          resPlus(x) {
            res += x;
            return res;
          },
          resMinus(x) {
            res -= x;
            return res;
          },
          resMult(x) {
            res *= x;
            return res;
          },
          resGet() {

            return res;
          },

    }
  }

let result = myCalc();
console.log(result.resSet(10)); 
console.log(result.resPlus(5)); 
console.log(result.resMinus(5)); 
console.log(result.resMult(5)); 
console.log(result.resGet());

Пример преподавателя

const numModule = (function (){
  let num = 0;

  function setNumber(val = 0) {
    num = Number(val);
    return this;
  }

  function plus(val) {
    num += Number(val);
    return this;
  }

  function minus(val) {
    num -= Number(val);
    return this;
  }

  function devide(val) {
    num /= Number(val);
    return this;
  }

  function pow(ex = 2) {
    num = Math.pow(num, ex);
    return this;
  }

  function getNumber() {
    return  Number(num.toFixed(2)) || 0;
  }

  return {
    setNumber,
    plus,
    minus,
    devide,
    pow,
    getNumber
  }
}());

console.log(
  numModule
    .setNumber(3)
    .pow(2)
    .getNumber()
)