2013-09-20 3 views
8

При использовании функции «каждый» jQuery существует ли способ передать аргументы вызываемой функции?Передача аргументов jQuery каждой функции

something.each(build); 

function build(vars) { 

} 

Я знаю, что я просто могу сделать следующее, но мне было интересно, если есть способ, в котором аргументы могут быть переданы непосредственно.

something.each(function() { 
    build(vars); 
); 
+1

нет ... нет –

+1

нет других способов .. . –

+1

http://stackoverflow.com/questions/5033861/pass-additional-parameters-to-jquery-each-callback – GVillani82

ответ

22

Вы можете выполнить вышеуказанное, используя закрытие. Функция .each принимает в качестве аргумента функцию с двумя аргументами, индексом и элементом.

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

Вот пример:

// closureFn returns a function object that .each will call for every object 
someCollection.each(closureFn(someVariable)); 

function closureFn(s){ 
    var storedVariable = s; // <-- storing the variable here 

    return function(index, element){ // This function gets called by the jQuery 
            // .each() function and can still access storedVariable 

     console.log(storedVariable); // <-- referencing it here 
    } 
} 

Из-за того, как работает JavaScript обзорное, то storedVariable будет референтным состоянием возвращенной функции. Вы можете использовать это для хранения переменных и доступа в любом обратном вызове.

У меня есть jsFiddle, который также подтверждает точку. Обратите внимание, что текст, выводимый на странице, отличается от HTML, определенного в области HTML. Посмотрите, как функция ссылается на сохраненную переменную и добавляет, что к тексту

http://jsfiddle.net/QDHEN/2/

Вот страница MDN для затворов для получения дополнительной справки https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures

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