Неясные вложенные "с" утверждениями
Я просматриваю проект для сторонних разработчиков, и есть действительно странный блок кода Javascript прямо вверху каждой страницы. Очевидно, что он ничего не делает, но это так странно, что я не могу не задаться вопросом, как капитал F 'стал:
(function() {
with (this[2]) {
with (this[1]) {
with (this[0]) {
return function(event) {};
}
}
}
})
Если мне не хватает чего-то, на разработчика должен повлиять какой-то амфетамин, чтобы произвести это самостоятельно, поэтому я предполагаю, что это остается автоматическим инструментом, но не может для меня жизни Представьте себе полезный сценарий.
Может ли кто-нибудь пролить свет на это? Кто-нибудь сталкивался с чем-то похожим?
Это абсолютно положительно все, за исключением открытого тега <script>
от байта нуля в документе. Как уже было сказано, я знаю, что он ничего не делает - даже если выражение было выполнено this
, было бы window
или global
, у которого не было бы числовых индексов, чтобы он терпел неудачу в первой строке.
Я знаю, что with
как концепция оставляет желать лучшего, и в качестве практической шутки это не смешно. Я оставлю вопрос открытым - может быть, какая-то обезьяна в шкафу где-то знает что-то об этом.
Ответы
Ответ 1
Это может быть интересно... похоже, это отладчик. Какой отладчик я не знаю, и почему он добавил бы такой нечетный код:
Почему эта функция отменена?
Возможно, вы могли бы спросить Скотта Северанса?
Все, что было сказано, я лично предпочел бы термин ape-подобный потомок...
Обратите внимание: Этот вопрос определенно довольно случайный, но мне особенно нравится тот факт, что (по крайней мере, частично) ответ был найден уже существующим на StackOverflow...?! Есть ли что-то, на что у SO нет ответа, он становится похожим на тех людей, которые никогда не любят признавать, что они ничего не знают!
Ответ 2
В соответствии с [MDN] [1] оператор with используется для включения объекта в операторы внутри.
Забастовкa >
Я просто наткнулся на аналогичный код в Chrome.
Я допустил ошибку при использовании ключевого слова "in" в качестве объекта var/, и он заменил мой код на вложенные "с", он заменил код только в файле источников инструментов dev.
Так что из отладчика, операторы WITH, вероятно, использовались в своем коде для организации иерархии JS, он встретил "in" и не нашел ничего, чтобы что-то найти.
Я отказался от файла (я тестировал SSE и... не удалось), поэтому теперь я пытаюсь воссоздать ошибку.