Comportement étrange de V8
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? Marc var foo = 999; function run(thunk) { thunk(); } function main() { print(foo); run(function foo() { print(foo); foo=123; print(foo); }); } main(); /* V8 prints: 999 function foo() { print(foo); foo=123; print(foo); } function foo() { print(foo); foo=123; print(foo); } */
Afficher les réponses par date
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
participants (2)
-
Bruno Dufour -
Marc Feeley