@okonoshi

Чему равно foo.x? Почему?

var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};

Объяснение автора не помогло разобраться, почему foo.x = undefined, почему bar = { n: 1, x: { n: 2 } } , при том что foo = { n: 2 }.
Ведь в bar лежит ссылка на foo, короче только я подумал, что понимаю что-то, так сразу облом.

не уходя далеко от кассы, помогите еще и понять вот эти задачи

function sum(a) {

  let currentSum = a;

  function f(b) {
    currentSum += b;
    return f;
  }

  f.toString = function() {
    return currentSum;
  };

  return f;
}

alert( sum(1)(2) ); // 3
alert( sum(5)(-1)(2) ); // 6
alert( sum(6)(-1)(-2)(-3) ); // 0
alert( sum(0)(1)(2)(3)(4)(5) ); // 15

Оказалось это тоже очень важно
  • Вопрос задан
  • 250 просмотров
Пригласить эксперта
Ответы на вопрос 1
dollar
@dollar
Делай добро и бросай его в воду.
Более простой пример:
(код)
var x = 5;
var y = x--;
console.log(y); //5

В конечном счёте всё дело в очерёдности, с чем бы вы ни имели дело: с замыканиями, с промисами и т.д. Сам язык по своей идеологии - однопоточный.

А вот так: foo.x = foo = {n: 2}; в реальной жизни, конечно же, делать не стоит, разве что вам нужна обфускация кода. Для удобочитаемости можно даже расставлять скобки там, где они не нужны и ни на что не влияют, чтобы подчеркнуть порядок выполнения вычислений. В данном же случае цепочку присвоений лучше разбить на строки.

Это лишь вершина айсберга того, что используется при обфускации js. Однако эти приёмы вряд ли пригодятся при создании кода. Крут не тот, кто умеет запутывать своё и распутывать чужое, а кто пишет красиво и понятно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы