• Есть ли подобие global из php в js?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    В javascript область видимости строится на замыканиях (вложенности функций), есть три оператора объявления переменных:
    var - переменная будет видна в текущей функции и во всех функциях объявленных внутри текущей функции, включая те, что объявлены внутри вложенных функций, данное объявление всплывает на начало функции не зависимо где в функции оно произведено
    let - переменная будет видна в пределах текущего блока после ее объявления (не всплывает в отличии от var), а так же во всех вложенных в текущий блок блоках и функциях
    Так же нужно отметить, что такое объявление произведенное в циклах создаст новую переменную на каждую итерацию цикла
    const - все то же самое, что и для let + значение нельзя изменить
    Важно отметить, что для объектов значением переменной является ссылка на объект, а не сам объект, то есть записать в такую переменную что-то еще нельзя, но состояние объекта менять можно

    При обращении к переменной она сначала ищется в текущей области видимости, а если в текущей области такой переменной не объявлена, то производится поиск в области видимости выше.
    Самой верхней областью видимости является глобальный объект, в нем поиск производится последним, если переменная не найдена и там, то будет возвращено значение undefined
    Важно: в strict режиме (который рекомендуется включать всегда) нельзя использовать не объявленные переменные за исключением в операторе typeof

    Многие среды исполнения js создают в глобальном объекте переменную содержащую ссылку на сам глобальный объект, например gui поток браузера создает несколько таких ссылок:
    window - глобальный объект текущего фрейма (вкладка браузера, попап-окно, iframe)
    top - глобальный объект самого верхнего фрейма (вкладки)
    parent - глобальный объект фрейма находящегося на уровень выше, либо равносильно top если текущий фрейм - вкладка браузера или попап-окно
    opener - глобальный объект фрейма, породившего текущую вкладку или попап-окно (может быть null, если текущая вкладка порождена самим браузером)

    В webworker'ах и webextension'ах браузера ссылка на глобальный объект хранится в переменной self
    В node.js - global

    Универсальный способ получить глобальный объект в любой среде исполнения:
    function getGlobal() {
      return (new Function('return this'))();
    }


    P.S. использование глобальной области видимости - дурной тон
    Ответ написан
    1 комментарий
  • Как не печатать знак доллара в php, или хотя бы в PhpStorm?

    Maksclub
    @Maksclub
    maksfedorov.ru
    А теперь самое забавное.

    Доллар нужен для однозначного парсинга синтаксиса языка парсером разбирая на лексемы/токены те или иные конструкции. PhpStorm тоже парсит язык, а значит вы хотите сделать отдельный парсер, который бы не опирался на доллар :) Но это приведет к интересным вещам и ситуациям.
    То есть нужно проделать работу, более сложную, чем сейчас делают имеющиеся парсеры, тк нужно учесть все что есть, но без одной из главных опорных точек.

    Нужно смириться с этим. Даже, если вы спрячете его визуально — вам придется его печатать. А тк нужно и печатать и скрыть, то могут возникать потрясающие (нет) ситуации, когда будет несогласованность того, что должно быть и того, как это выглядит (то есть есть доллар или нет — выглядит одинаково)

    Если накаляет доллар (а он может накалять, могу понять вас (честно), тк элемент контр-интуитивный на текущий год) — смена языка кажется вполне вариантом.
    Ответ написан
    7 комментариев
  • Как будет лучше сделать это?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Ничего не делать, а проверку на "просроченные" сообщения делать только в момент обращения юзера к ним. То есть ты удаляешь просроченные (скрываешь) только когда юзер заходит в "Мои сообщения", и не насилуешь сервак своими долго спящими скриптами.
    Ответ написан
    5 комментариев
  • Как убрать пустой td в таблице, но чтобы ничего не сломалось при этом?

    @hypnogaja
    Вам нужен атрибут colspan
    Ответ написан
    Комментировать