@eugenedrvnk

Как разобрать код (underscore.js)?

Пытаюсь разбираться с underscore.js и там есть подобный фрагмент кода, суть которого заключается в определении "корневого" объекта, куда в дальнейшем будут добавляться разные методы библиотеки.

var root = typeof self == 'object' && self.self === self && self ||
            typeof global == 'object' && global.global === global && global ||
            this;


У меня возникла небольшая проблема в целом с прочтением этого участка кода.
Как его правильно воспринимать?

Понимаю, что переменной root будет присвоен первый 'true' фрагмент из трёх возможных вариантов, но что при каждом из них происходит, непонятно.
  • Вопрос задан
  • 129 просмотров
Решения вопроса 2
Xuxicheta
@Xuxicheta
инженер
a = x && '1' || '2'
соответствует
a = x ? '1' : '2'
Разложите, начиная с конца.

Или вот вам аналог
const root = (() => {
  if (typeof self == 'object' && self.self === self) {
    return self
  } 
  if (typeof global == 'object' && global.global === global ) {
    return global
  } 
   return this;
 }
})();


короче, не надо так писать в проде :)
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
См. таблицу Приоритета операторов JS. От более высокого к менее:
  1. == и === (одинаково)
  2. &&
  3. ||

расставить скобки
var root = 
  ( typeof self == 'object' && self.self === self && self )  ||
  ( typeof global == 'object' && global.global === global && global )  ||
  ( this );

и ещё больше скобок
var root = 
  ( (typeof self == 'object') && (self.self === self) && (self) )  ||
  ( (typeof global == 'object') && (global.global === global) && (global) )  ||
  ( this );


Пытаются понять контекст выполнения.
  • self в Worker'ах;
  • global определена в nodejs;
  • this в прочих.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы