2016-04-03 17 views
0

Bu ben hemen altında bu işlev olsa gidiyordu temelde temel javascript soru şudur:İşlevi değiştirmek için parametreleri kim iletiyor?

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; 
}; 

bu kodu zaten şimdi benim sorum kod peice hakkında özellikle, SO üzerinde başka bir iş parçacığı alınır görebileceğiniz gibi :

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; 
    }); 

Değiştir işlevi IE'nin parametreleri benim dev araçları görüldüğü gibi m, r, g, b temelde şunlardır:

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

benim dev araçları aboe bakın ben geçmişti seçenek #fff olduğunu.

Şimdi sorum şu kimin parametrelerini geçiyor? regex'in geçirilmekte olan parametrelerle alakası var mı? bu parametreleri kim geçiyor? m, r, g, b? Regex'in HERE ne yaptığını kontrol ettim, ancak parametreleri bu parametreye kimin geçtiğini hala anlamıyorum?

+0

'.replace' parametrelerini geçiyor, buradaki geçer argümanları görebilirsiniz https://developer.mozilla.org/en-:

Bu

burada da açıklandığı geri arama deseni olarak bilinir ABD/dokümanlar/Web/JavaScript/Referans/Global_Objects/Dize/değiştir – elclanrs

+0

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

+1

İlk argüman tüm maç. Daha sonra silahlar her yakalama grubudur. Bu işlev _String_ '" $ 1 $ 1 $ 2 $ 2 $ 3 $ 3 "'i geçmekle aynı şeydir –

cevap

1

Bu, anonim işleve argüman olarak m, r, g, b parametrelerini geçiren değiştirme işlevine bir parametre olarak iletilen anonim bir işlevdir.

Satır: hex.replace(shorthandRegex, function(m, r, g, b) {, iki parametreden geçen hex değişkenindeki değiştirme işlevini çağırıyor. Birincisi shorthandRegex ve ikincisi anonim işlevdir. Anonim işlev, parametreleri çağırdığında değiştir işlevinden alır.

bu deseninin bir örneği aşağıda verilmektedir:

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); 
}); 

Bu gerekir konsola çıkışı 1, 1, 2, 3, 4. http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/

İlgili konular