2016-04-03 2 views
0

Это основной Javascript вопрос в основном я просто хотел, хотя эту функцию ниже:Кто заходит за параметрами?

function hexToRgb(hex){ 
    // By Tim Down - http://stackoverflow.com/a/5624139/3493650 
    // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF") 
    var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; 
    hex = hex.replace(shorthandRegex, function(m, r, g, b) { 
    return r + r + g + g + b + b; 
    }); 
    var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); 
    return result ? { 
     r: parseInt(result[1], 16), 
     g: parseInt(result[2], 16), 
     b: parseInt(result[3], 16) 
    } : null; 
}; 

Как вы можете видеть, этот код уже взят из другого потока на SO, теперь мой вопрос конкретно о peice коды :

var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; 
    hex = hex.replace(shorthandRegex, function(m, r, g, b) { 
    return r + r + g + g + b + b; 
    }); 

Параметры функции замены IE м, г, д, б, в основном, следующий, как я вижу в моих Девых инструментах:

m = "#fff", 
r = f 
g = f 
b = f 

Я вижу aboe в моих Девых инструментах, вариант я прошел это #fff.

Теперь у меня вопрос, кто передает туда параметры? имеет ли регулярное выражение какое-либо отношение к передаваемым параметрам? кто передает эти параметры? m, r, g, b? Я проверил, что делает регулярное выражение HERE, но я до сих пор не понимаю, кто передает параметры этой функции?

+0

'.replace' проходят параметры, вы можете увидеть аргументы он проходит здесь https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Global_Objects/String/replace – elclanrs

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter –

+1

Первый аргумент весь матч. Позже арги являются каждой группой захвата. Эта функция такая же, как передача _String_ '" $ 1 $ 1 $ 2 $ 2 $ 3 $ 3 "' –

ответ

1

Это анонимная функция, которая передается как параметр функции замены, которая передает параметры m, r, g, b в качестве аргументов анонимной функции.

Строка: hex.replace(shorthandRegex, function(m, r, g, b) { вызывает функцию замены шестнадцатеричной переменной, проходящей по двум параметрам. Первый - это сокращенная Regex, а вторая - анонимная функция. Затем анонимная функция получает параметры из функции replace при ее вызове.

Примером этого шаблона:

var func = function(a, b) { 
console.log(a); 
b(1,2,3,4); 
} 

func(1, function(a,b,c,d) { 
console.log(a); 
console.log(b); 
console.log(c); 
console.log(d); 
}); 

Это следует вывести 1, 1, 2, 3, 4 на консоль.

Это также известен как модель обратного вызова, который объясняется здесь: http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/

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