Javascript, вызывающий функцию несколько раз сокращенно - PullRequest
3 голосов
/ 30 июня 2011

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

Предположим, у меня есть простая функция:
function foo(name){alert(name);}

Также предположим, что мне нужно вызывать эту функцию несколько раз с несколькими разными именами:
foo("bar"); foo("blahh"); foo("myName"); foo("yourName");

Есть ли сокращение для этого?

Например: foo("bar":"blahh":"myName":"yourName");

Этот пример тривиален, но на практике этот принципал может быть очень полезным.Если есть какое-то решение jQuery, я тоже открыт для этого.

Ответы [ 5 ]

6 голосов
/ 30 июня 2011

Вы можете поместить свои параметры в массив и выполнить итерацию по нему:

params = ["bar", "blahh", "myName", "yourName"];
for (var i=0; i<params.length; i++) 
    foo(params[i]);

Если функция принимает несколько аргументов, вы можете поместить массивы в массивы:

params = [[1,"one"], [2,"two"], [5,"five"]];
for (var i=0; i<params.length; i++) 
    foobar(params[i][0], params[i][1]);

или

params = [[1,"one"], [2,"two"], [5,"five"]];
for (var i=0; i<params.length; i++) 
    foobar.apply(null, params[i]);
5 голосов
/ 30 июня 2011

Как обобщение других ответов:

Function.prototype.sequence = function(vals) {
   for (var i = 0; i < vals.length; ++i) this(vals[i]);
}

это добавит метод sequence ко всем функциям.Таким образом, вы можете использовать его с любой функцией:

function foo() {....}

foo.sequence(["bar","blah","myName","yourName"]);
3 голосов
/ 30 июня 2011

Думайте о задаче как , применяя каждый элемент в последовательности, в свою очередь, к данной функции . В jQuery это можно сделать так:

function foo(name){ alert(name) }
$.each(["bar","blah","myName","yourName"], function (index, value) {
   foo(value)
})

Дополнительная функция требуется, потому что обратному вызову jQuery.each передается индекс и значение в качестве параметров. Было бы хорошо, если бы значение было первым: (

Сравнить с (модифицированной foo функцией):

function foo(index, name){ alert(name) }
$.each(["bar","blah","myName","yourName"], foo)

Удачного кодирования.

2 голосов
/ 30 июня 2011

На самом деле вы могли бы сделать что-то вроде этого:

function foo(){
for (var i=0; i< arguments.length; i++){
         alert(arguments[i]);
     }
}

и затем вы можете вызвать его с любым количеством аргументов:

foo('miao', 'baw');

// предупреждает miao и затем baw

2 голосов
/ 30 июня 2011

Вы можете передать массив функции:

function foo(vals) {
   for (var i = 0; i < vals.length; ++i) {
       alert(vals[i]); 
   }
}

foo(["bar","blah","myName","yourName"]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...