J'ai beaucoup de confusion sur la situation où la valeur par défaut d'un paramètre de fonction est une fonction
Par exemple
let foo = 'outer'; function bar(func = x => foo) { let foo = 'inner'; console.log(func()); } bar(); //outer
Selon l'introduction de Ruan Yifeng à es6, je sais que si les paramètres de la fonction sont des valeurs par défaut, il y aura d'abord une portée au niveau du bloc encapsulant les paramètres, et la portée au niveau du bloc disparaîtra une fois l'initialisation terminée
Une fois la valeur par défaut du paramètre définie, le paramètre formera une portée (contexte) distincte lorsque la fonction est déclarée et initialisée. Une fois l'initialisation terminée, cette portée disparaîtra. Ce comportement grammatical n'apparaîtra pas lorsque la valeur par défaut du paramètre n'est pas définie.
Je peux comprendre si la valeur par défaut est une variable normale, mais je ne comprends toujours pas pourquoi la sortie ici est externe au lieu d'intérieur
Une phrase : la fermeture d'une fonction est formée lorsqu'elle est définie, pas lorsqu'elle est exécutée.
Développez soigneusement le sucre syntaxique et vous devriez pouvoir le voir plus clairement
Ecoute,
fk_compiler
里是不是只能返回外部作用域下的foo
?js est une portée lexicale, et la valeur de foo prend la valeur lorsque la fonction est définie plutôt que lorsqu'elle est exécutée.
Basé sur le code du répondant :
fk_compiler
被声明的作用域在全局,所以,它会去访问全局作用域中的foo
. La réponse sortira.Code similaire :