Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хотелось бы понять функцию 
:(
    Опции темы
YahоО
Дата 9.3.2019, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 11.6.2015

Репутация: нет
Всего: 1



Хотелось бы понять одну функцию, т.е почему она именно так написана, а конкретнее: зачем в круглых скобках, что идут сразу за фигурной скобкой,
написан 0, запятая и что то там еще, 
зачем нужны эти элементы в круглых скобках в этой функции:

Код

 var k = function(a, b, c, e) {
            (0,
            d.LoadCSSFile)(a, function(a, f) {
                if (console.log("CSS file load complete: " + a),
                g || (f = f.replace(/\.\.\//gi, window.veamsConfig.themeUrl)),
                e(a, f),
                (0,
                d.StorageAvailable)("localStorage"))
                    try {
                        (0,
                        d.LocalStorageSet)(c, window.veamsConfig.cssJsQueryString),
                        (0,
                        d.LocalStorageSet)(b, f),
                        console.log("Saved " + c + " to local storage")
                    } catch (h) {
                        console.error(h)
                    }
            })
        };

Такая конструкция встречается неоднократно на сайте https://www.iqos.com.ua/themes/custom/pmi3/...ipt.js?v=8.5.11
Как эта функция работает, и что вообще выполняет эта функция в целом?

Это сообщение отредактировал(а) YahоО - 10.3.2019, 12:40
PM MAIL   Вверх
ksnk
Дата 10.3.2019, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Это - результат минимизации - способа, с помощью которого код делают меньше. Используется специфический JS трюк для оператора в круглых скобках - все операторы, перечисленные через запятую, выполняются последовательно, значение самого оператора - самое последнее значение.

Некоторые конструкции вызывают недоумение - 
Код

(0,d.LocalStorageSet)(...

Вероятно тут какая-то ошибка логики минимизатора, так как конструкцию можно было записать и короче 
Код

d.LocalStorageSet(...



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
whatisnot
Дата 11.3.2019, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 14.12.2014

Репутация: нет
Всего: 2



Цитата(ksnk @  10.3.2019,  18:18 Найти цитируемый пост)
Вероятно тут какая-то ошибка логики минимизатора


Это не ошибка, а "защита от дураков".
PM MAIL   Вверх
YahоО
Дата 11.3.2019, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 11.6.2015

Репутация: нет
Всего: 1



Защита от дураков по всей видимости это вся функция. Вероятно она вообще никогда не вызывается и не выполняется.
Потому что вся функция не рабочая, при попытке ее выполнить все стопорится.
Разве что в процессе работы скрипта эта функция подвергается какой либо модификации:
Код

function t(a){document.body.innerHTML+=a+'<br>'}

var k = function(a, b, c, e) {
                     t(1);
    (0, d.LoadCSSFile)(
      a, 
      function(a, f) {
                     t(2);
        if(console.log("CSS file load complete: " + a),
            g || (f = f.replace(/\.\.\//gi, window.veamsConfig.themeUrl)),
            e(a, f),
            (0, d.StorageAvailable)("localStorage")
           )
                     t(3);
            try {  t(4);
                (0, d.LocalStorageSet)(c, window.veamsConfig.cssJsQueryString),
                (0, d.LocalStorageSet)(b, f),
                console.log("Saved " + c + " to local storage")
            } catch (h) {
                     t(5);
                console.error(h)
            }
      }
    )
};
t("Start");
//k();
//k(1,2,3,4);
k=k.toString().split("{")[0]+/*"..."+*/  "{t(77)}";
t(k);
eval("k="+k);
k();
t("Finish");

Интересно зачем понадобились такие выкрутасы на том сайте, но это уже не вопрос, потому дальше рассматривать их скрипты уже не интересно, после таких "функций".
ksnkwhatisnot спасибо!
PM MAIL   Вверх
ksnk
Дата 13.3.2019, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Вообще-то функция работающая. Если просто выковырять ее из окружающего текста по ссылке выше, то там будут неопределенные переменные (d) и неопределенные функции.
а так - какая то js библиотека...

С чего вообще возникла идея ковырять чужой код? Для обучения есть более открытые источники smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1269 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.