Я нашел файл в поле зрения онлайн, и, оказывается, есть веская причина для этого.
Прежде всего, следует отметить, что код в вопросе относится к измельченному источнику, который был отступом.
Вот кусок кода:
var c=function(){},c={autoSelectFirst:!1,appendTo:"body",serviceUrl:null,lookup:null,
onSelect:null,width:"auto",minChars:1,maxHeight:300,deferRequestBy:0,params:{},
formatResult:g.formatResult,delimiter:null,zIndex:9999,type:"GET",noCache:!1,
onSearchStart:c,onSearchComplete:c,onSearchError:c,
// -----------^------------------^---------------^
Так это код в вопросе, но немного больше. Важно отметить, что переменная c
используется при создании объектного литерала с onSearchStart:c,onSearchComplete:c,onSearchError:c,
.
Значит, значение c
присвоено в объекте? Поскольку объект все еще находится в процессе создания, это означает, что c
все еще ссылается на функцию, поэтому свойства, подобные onSearchStart
, которые, как представляется, обработчики событий, получают пустую функцию по умолчанию.
Это имеет смысл.
Чтобы проверить, я также нашел исходный, неиспользованный источник. Вот соответствующий код:
// v---originally it's called `noop`
var noop = function() { },
that = this,
defaults = {
autoSelectFirst: false,
appendTo: 'body',
serviceUrl: null,
lookup: null,
onSelect: null,
width: 'auto',
minChars: 1,
maxHeight: 300,
deferRequestBy: 0,
params: {},
formatResult: YithAutocomplete.formatResult,
delimiter: null,
zIndex: 9999,
type: 'GET',
noCache: false,
onSearchStart: noop, // <---here it's being used
onSearchComplete: noop, // <---here it's being used
onSearchError: noop, // <---here it's being used
Так что это яснее, что noop
, что в целом означает отсутствие операций, имеет свое название и действительно используется в объект создается непосредственно под ним. Кроме того, это только место noop
используется во всем файле
Таким образом, очевидно, что minifier был достаточно умен, чтобы увидеть, что переменная, первоначально называемая noop
, больше не будет использоваться, поэтому она может свободно использовать это имя переменной для объекта.Впечатляющий бит анализа кода, ИМО.
Это похоже на код, написанный кем-то, кто действительно не знал, что они делают, или же результат какой-либо ошибки редактирования. – Pointy
Где вы столкнулись с этим? Был ли код уменьшен? Похоже, это может быть артефакт какого-либо автоматизированного генератора кода. Имена переменных и параметров, несомненно, заставляют его выглядеть так. Можете ли вы дать какой-то контекст? –
один день в далеком будущем Я узнаю все способы объявления функции в js. Добавлено еще одно сегодня. Интересно, что еще заманивает в темных уголках сети ...: D –