Pourquoi est-ce que j'obtiens une erreur au lieu de consigner « non défini » sur la console lorsque j'utilise console.log() sur une variable que je crée plus tard mais dans une autre balise de script ?
P粉579008412
P粉579008412 2023-09-12 22:58:00
0
1
554

Pourquoi cet extrait de code donne l'erreur "Uncaught ReferenceError : x is not Defined" dans la console

<body>
    <script>
        console.log(x);
    </script>
    
    <script>
        var x = 10;
    </script>
</body>

Et ce disque est "indéfini" ?

<body>
    <script>
        console.log(x);
        var x = 10;
    </script>
</body>

J'essaie de comprendre la déclaration des variables et la portée des variables. Et attendez-vous à ce que le boosting se produise puisque tout le code se trouve sur la même page. Mais comme console.log() est séparé dans une autre balise de script, j'obtiens une erreur au lieu de simplement enregistrer « non défini » sur la console.

P粉579008412
P粉579008412

répondre à tous(1)
P粉536909186

var 被提升,这意味着它可以在定义它的范围的开头访问,即使声明行可能位于范围的末尾。如果您在声明之前访问该 var,则它是 未定义 car il vous reste à effectuer la déclaration et éventuellement initialiser la variable à une valeur précise. C'est ainsi que fonctionne votre deuxième exemple.

En savoir plus sur le boosting ici :

https://developer.mozilla.org/en-US/docs/glossary/lifting

Mais dans le premier exemple 2 有 2 个不同的作用域,因此第一个脚本中基本上不存在 var ,因此错误 not Defined.

Découvrez var et sa portée ici :

https://developer.mozilla.org /en-US/docs/Web/JavaScript/Reference/Statements/var

Important Je déconseille fortement d'utiliser var。请改用 constlet。使用 var 进行提升会导致错误,有时很难调试和修复。如果您需要在生产中仅使用 var. Veuillez utiliser const et let à la place. L'utilisation de var à des fins de promotion peut entraîner des erreurs parfois difficiles à déboguer et à corriger. Si vous devez utiliser uniquement

en production, utilisez simplement esbuild pour rétrograder votre code vers l'ancienne version appropriée de JS.

constlet有点被提升,但是在提升状态下访问它们会导致运行时错误(这称为暂时的死区),这就是为什么它们更安全,因为您会立即收到错误,而不是静默地提升 varFait intéressant, const et let sont également quelque peu promus, mais y accéder dans l'état élevé provoque une erreur d'exécution (c'est ce qu'on appelle une zone morte temporaire ), c'est pourquoi ils sont plus sûrs car vous obtenez l'erreur immédiatement au lieu de la générer silencieusement

vous laissant avec une erreur potentielle dont vous ne connaissez pas l'existence.

À propos de la zone morte temporelle :

https://developer.mozilla .org/en-US/docs/Web/JavaScript/Reference/Statements/let#temporal_dead_zone_tdz

🎜
<body>
    <script>
        console.log(x);
        const x = 10;
    </script>
</body>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal