2015-08-05 3 views
-4

Я не могу понять, как работает function(match, p1, p2).Работа встроенных функций javascript

Что такое параметр соответствия? Код разбивается, если я не пишу параметр соответствия.

function incrementString(input) { 
    if (isNaN(parseInt(input[input.length - 1]))) return input + '1'; 
    return input.replace(/(0*)([0-9]+$)/, function(match, p1, p2) { 
     var up = parseInt(p2) + 1; 
     return up.toString().length > p2.length ? p1.slice(0, -1) + up : p1 + up; 
    }); 
} 

P.S: Я новый, полностью использующий Js для разработки. Тем не менее, я работаю над JSF и Java с прошлых нескольких лет.

ответ

0

От MDN:

str.replace(regexp|substr, newSubStr|function[, flags]) 

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

str.replace(regexp, function) 

и MDN говорит нам, что они:

функция (замена)
функции, которая будет вызвана для создания нового подстроки (поставить на месте подстроки, полученной от параметр 1). Аргументы, предоставленные этой функции, описаны в разделе «Указание функции как параметра» ниже.

и

Аргументы функции заключаются в следующем:

и т.д. и т.п. Я не буду цитировать всю таблицу.

Если оставить match аргумент из списка параметров, то значение присваивается p1 и p2 будет первым и вторым аргументом вместо второго и третьих. Это не те ценности, которые вам нужны.

Было бы как принимать этот код:

function call_with_one_two_three(f) { 
    f(1,2,3); 
} 

call_with_one_two_three(function (one, two, three) { 
    alert(two + three); 
}); 

И решив, что так как вы не использовали one вам не нужно:

function call_with_one_two_three(f) { 
    f(1,2,3); 
} 

call_with_one_two_three(function (two, three) { 
    alert(two + three); 
}); 

Это дает вам two + three в 3.

Вкратце: Позиция аргументов имеет значение (и это имя не указано).

+0

Thanks @Quentin – Noctis

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