谁传递参数来替换功能?

时间:2016-04-03 13:55:36

标签: javascript

这是一个基本的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 ,但我仍然不明白谁将参数传递给此函数?

1 个答案:

答案 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/