2013-06-06 11 views
9

Natknąłem się na funkcję przepisywania funky w JavaScript.Przepisywanie funkcji w skryptach java

var foo = function() { 
    alert("Hello"); 
    foo = function() {alert("World !");}; 
}; 
foo(); 
foo(); 

W jakich sytuacjach są one pomocne i czy istnieje inny język skryptowy, który obsługuje ten rodzaj kodu?

Skrzypek Link: http://jsfiddle.net/4t2Bh/

+1

ta nazywa się [leniwy definicja funkcji] (http: //javascriptweblog.wordpress. com/2010/04/27/the-russian-doll-principle-rec-writing% C2% A0Functions% C2% A0at% C2% A0runtime/# more -351), podobne do leniwego ładowania z tą różnicą, że zmienna zachowuje funkcjonować. – jbabey

+0

To tylko daje ostrzeżenie, że zmienna jest już zdefiniowana i po prostu ostrzeże "Hello" http://jsbin.com/ocezar/1/edit – elclanrs

+1

@elclanrs, ale wywołaj 'foo()' po raz drugi i zobacz, że alert mówi . To nie będzie cześć. – epascarello

Odpowiedz

1

Można użyć tego idiomu zainicjować LUT na pierwszej rozmowy jak ta

var getBase32Value = function (dummy) { 

    var base32Lut = {}; 
    var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; 

    for(var i=0; i<alphabet.length; i+=1) { 
     base32Lut[ alphabet[i] ] = i; 
    } 

    getBase32Value = function (v) { 
     return base32Lut[ v ]; 
    } 
    return base32Lut[ dummy ]; 
}