Si vous voulez dire dans l'environnement JavaScript du navigateur par défaut, il n'y en a effectivement aucun. fourni par window
y console
n'ont pas été suivis ou réaffectés.
Dans l'environnement JavaScript du navigateur par défaut, window
est un global qui fait référence à l'objet global, qui est aussi l'objet fenêtre. L'objet global contient la plupart des globaux comme propriétés (auparavant, c'était tous, mais dans ES2015, cela a changé ; les globaux créés par let
, const
ou class
ne sont pas des propriétés de l'objet global). Mais ce n'est pas vrai dans la plupart des environnements non-browser (NodeJS, par exemple, utilise global
au lieu de window
), ou même dans certains environnements de navigateur qui ne sont pas par défaut (comme l'environnement d'un travailleur web, qui ne dispose pas de window
puisqu'ils ne peuvent pas accéder à la fenêtre). Ainsi, dans les environnements où window
n'est pas défini, window.console.log
échouera lorsque console.log
ne le ferait pas (à condition que l'environnement fournisse une console
).
Pour comprendre la différence, examinons chacun d'entre eux :
console.log(...)
signifie :
- Le moteur JavaScript doit rechercher une liaison pour l'identifiant
console
en commençant par le contexte d'exécution actuel, puis le suivant, puis le suivant, jusqu'à ce qu'il le trouve à portée globale.
- Ensuite, il consulte le
log
sur l'objet résultant.
- Puis il l'appelle
window.console.log(...)
signifie :
- Le moteur JavaScript doit rechercher une liaison pour l'identifiant
window
en commençant par le contexte d'exécution actuel, puis le suivant, puis le suivant, jusqu'à ce qu'il le trouve à portée globale.
- Ensuite, il consulte le
console
sur l'objet résultant.
- Ensuite, il consulte le
log
sur l'objet résultant.
- Puis il l'appelle
Donc, par exemple, voici un exemple où console
a été occulté, et donc console.log
échoue alors que window.console.log
travaux :
function foo() {
var console = 42;
try {
console.log("You WON'T see this.");
} catch (e) {
}
try {
window.console.log("You WILL see this.");
} catch (e) {
}
}
foo();
0 votes
developer.mozilla.org/fr/US/docs/Web/API/Console
0 votes
Dans une page de navigateur, ils seraient typiquement identiques car
window
est l'espace de nom global. pas nécessairement dans d'autres contextes.0 votes
Ça a l'air bien. Donc il n'y a aucune différence entre la fonction et la sortie ? L'examinateur a-t-il essayé de me piéger ?
6 votes
N'étant pas devin, il est difficile de savoir ce que l'intervieweur essayait de faire, mais je pense que la question visait à tester votre connaissance des éléments suivants
window
étant l'objet global (du moins dans certains environnements).1 votes
Duplicata possible de Doit-on écrire window.X lorsqu'on se réfère à une propriété globale intégrée X dans le navigateur ?
0 votes
Voir aussi Pourquoi l'accès à une variable en utilisant window.variable est-il plus lent ?
0 votes
Duplicata possible de Doit-on écrire window.X lorsqu'on se réfère à une propriété globale intégrée X dans le navigateur (de bureau) ?