2009-07-28 2 views
0

я использую плагин JQuery Autocomplete для отображения информации о пользователе в поле поиска, и я не могу вполне понять смысл синтаксиса следующей синтаксического анализа функции:Как интерпретировать синтаксис функции синтаксического анализа плагина Jquery Autocomplete в

$("#UserSearchBox").autocomplete('FindUser.ashx', 
{ 
    minChars: 2, 
    width: 400, 
    max: 5, 
    parse: function(data) 
    { 
    return $.map(eval(data), function(row) 
    { 
     return { 
     data: row, 
     value: row.UserID, 
     result: "" 
    } 
    }); 
}, 
formatItem: function(item) 
{ 
    return FormatUser(item); 
}); 

Плагин прекрасно работает: он извлекает JSONified массив информации о пользователе из обработчика HTTP и отображает форматированные значения с помощью функции FormatUser, но мне очень хотелось бы знать, что делает следующий код (я просто скопировал он из образца и скорректирован для объекта пользователя):

return $.map(eval(data), function(row) 
{ 
    return { 
    data: row, 
    value: row.UserID, 
    result: "" 
    } 
}); 

Кроме того, почему открывающая скобка второго возврата должна быть в той же строке, что и оператор возврата? Если изменить код следующим образом:

return $.map(eval(data), function(row) 
{ 
    return 
    { 
    data: row, 
    value: row.UserID, 
    result: "" 
    } 
}); 

Я получаю ошибку о недопустимой этикетке данных. Есть идеи? Благодарю.

ответ

2

Это потому, что JavaScript вставляет автоматическую точку с запятой.

Проверить https://stackoverflow.com/questions/1188551/common-programming-mistakes-for-javascript-developers-to-avoid/1188800#1188800

Если у вас есть код

function test() 
{ 
    int i = 5; 


    return 
    { 
     output : i 
    }; 
} 

Это интерпретируется как:

function test() 
{ 
    int i = 5; 


    return; //automatic semicolon insertion by JavaScript the code below is dead code. 
    { 
     output : i 
    }; 
} 

Вот почему вам нужно открывающую фигурную скобку на той же линии, как 'возвращение'.

+0

Спасибо. Не знал этого. Поэтому для моего первого вопроса я предполагаю, что код возвращает объект с тремя свойствами: данными, значением и результатом, правильно? –

+0

Да, это правильно. анонимная функция, переданная методу карты, возвращает объект с 3 свойствами. – SolutionYogi

1

У JavaScript есть некоторые правила синтаксиса о полуколлахе, которые вызывают такие вещи. Если в конце строки может быть размещена точка с запятой, она будет помещена. Это то, что позволяет забыть поместить в них всевозможные места. Это также вызывает такие вещи, потому что возврат может быть использован сам по себе.

СА видит это:

return $.map(eval(data), function(row) 
{ 
    return ; 
    { 
    data: row, 
    value: row.UserID, 
    result: "" 
    } 
}); 
+0

Спасибо. Не знал этого. –

Смежные вопросы