这是一个基本的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上的另一个线程中获取,现在我的问题是关于代码的问题:
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;
});
替换功能的参数I.E. m,r,g,b基本上就像我在开发工具中看到的那样:
m = "#fff",
r = f
g = f
b = f
我在开发工具中看到了aboe,我通过的选项是#fff。
现在我的问题是谁传递参数?正则表达式与传递的参数有什么关系?谁传递这些参数? m,r,g,b?我已经检查了正则表达式正在做什么 HERE ,但我仍然不明白谁将参数传递给此函数?
答案 0 :(得分:1)
这是一个定义的匿名函数,它作为参数传递给replace函数,该函数将参数m,r,g,b作为参数传递给匿名函数。
行:hex.replace(shorthandRegex, function(m, r, g, b) {
正在调用传递两个参数的十六进制变量上的替换函数。第一个是shorthandRegex,第二个是匿名函数。然后,匿名函数在调用它时从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/