Ну на вскидку всё верно, разве что в первой задаче после result = false, следует сделать break из цикла, ибо одного false достаточно. Во второй же задаче, аналогично, else лишний: нет никакого смысла каждую итерацию переопределять result как false, т.к. первый же true приведёт к завершению функции, имеет смысл присвоить result = false в самом начале по аналогии с первой функциией.
Ставить в циклах break, а return делать в конце, или делать return сразу в цикле - вопрос исключительно стиля кода, т.е. делайте так, как вам преподают.
То же касательно if(foo == true) vs if(foo) и if(bar != true), if(bar == false) vs if(!bar), первое нагляднее и считается более правильным, но второе проще и встретить можно чаще.
По последней функции: поскольку вы используете let, то, надо полагать, подразумевается самый современный javascript, тогда можно было бы сделать всё по-модному, например:
dif: function() {
for(let i = 0; i < arguments.length; i++) {
console.log(result);
result -= arguments[i];
}
return result;
},
->
dif: (...args) => args.reduce( (a, b) => a - b, result ),
Но это если только вам показывали такую "магию". Сам по себе ваш вариант ничуть не хуже, и скорее всего даже производительнее.)
Единственный момент, в последней функции у вас переменная result для всех методов едина, а значит все вычисления для конкретного myCalculator сохраняются, что было бы логично, но судя по примеру каждый раз вычисления должны начинаться с изначального значения.