On 2011-11-02, at 10:32 PM, Marc Feeley wrote:
Le programme JS suivant a un comportement bizarre sous V8. J'aurais cru que "foo" est une variable dont on peut changer la valeur, après tout V8 ne donne pas d'erreur lorsqu'on fait "foo=123;" et pourtant print(foo) juste après donne la définition de fonction foo!
Est-ce que ça respecte ES5?
À moins que je ne fasse erreur, une déclaration de fonction crée un "immutable binding" qui, d'après la spec, ne peut faire l'objet d'une affection. Donc, foo=123 utilise le binding sur le l'objet global plutôt que le binding local. Si tu déclares foo en utilisant "var foo = fonction () ...", tu obtiens le comportement attendu.
Bruno