2015-05-08 6 views
0

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

Для этого мне нужна функция генерации функции, которая принимает массив в качестве аргумента и возвращает внутреннюю функцию, которая имеет этот массив, встроенный в нее.

Вот пример:

function create_query (list_of_requirements) { 
    return function (item) { 
    var is_match = true 
    // the next function sets is_match to false if the item fails 
    list_of_requirements.forEach(check_if_item_meets_requirement) 
    return is_match 
    } 
} 

Пример использования этого:

function search (parsed_user_string) { 
    db.get(create_query(parsed_user_string)).then(function(results){ 
    show_results(results) 
    }) 
} 

Как я могу построить перечень требований к внутренней функции?

+1

Похоже, вы уже это делаете. В чем проблема, с которой вы сталкиваетесь? – Barmar

+0

Я вижу два вопроса: вы никогда не вызываете функцию, возвращаемую 'create_query()'. Во-вторых, я предполагаю, что 'db.get()' ожидает, что его аргумент будет строкой запроса, но ваша функция просто возвращает логическое значение. – Barmar

+0

'check_if_item_meets_requirements' также должен находиться в области внутренней функции, поэтому он может присваивать' is_match'. – Barmar

ответ

0

Мне нужно было использовать крышку.

Вот более простой пример решения.

function makePrinter (num) { 
    (return function() { 
    print(num) 
    }) 
} 

, а затем:

var print5 = makePrinter(5) 
print5() > prints 5! 

Я до сих пор не совсем понимаю, как замыкания достижения этой цели, но она есть.

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

  • Нет связанных вопросов^_^