Maison  >  Article  >  interface Web  >  Explication détaillée de la portée javascript

Explication détaillée de la portée javascript

藏色散人
藏色散人avant
2019-05-07 09:15:222447parcourir

Compréhension de la portée : la portée dans laquelle les variables et fonctions définies prennent effet. JavaScript a deux types : la portée globale et la portée des fonctions.

Remarque : es6 implémente la portée au niveau du bloc let, qui n'est pas native de js. La couche inférieure est également implémentée via var. Si vous souhaitez connaître les détails spécifiques, veuillez visiter Babel Official pour analyser let in es6.

Contexte d'exécution

Portée : au sein d'un paragraphe ou d'une fonction
Global : déclaration de fonction, déclaration de variable. Portée : ;
Fonction : déclaration de fonction, déclaration de variable, this, arguments. Portée : à l'intérieur d'une fonction ;

Promotion de la déclaration de fonction et de variable

<script>
        foo(); //打印a
        var foo = 1;
        function foo (){
            console.log(’a‘)
        };
        console.log(foo); //1
</script>


//实际的执行顺序为
<script>
        function foo(){  //函数声明优先于变量的声明
            console.log("a");
        }
        //var a ;  重复声明,这儿被省略了。
        foo(); //打印a
        foo = 1;  //给foo赋值为1
        console.log(foo); //1
</script>

Lorsque le moteur js exécute un bloc de code de contexte d'exécution, l'ordre d'exécution est :
1. ) {}; (la fonction est prioritaire) Remarque : let a = function (){} Il s'agit de la déclaration et de l'affectation de variables, pas de la déclaration d'une fonction.
2. Déclaration de variable var a; Remarque : Au début, seule la variable est déclarée, sans affectation. Si cette variable est utilisée avant l'affectation, la valeur est : non définie.
3. Lorsque le contexte d'exécution est la portée de la fonction : déterminez ceci et les arguments.
4. Exécutez le code dans la portée de manière séquentielle selon la stratégie js monothread et asynchrone.

Nous avons l'habitude de considérer var a = 2; comme une déclaration, mais en fait, le moteur JavaScript ne le pense pas. Il traite var a et a = 2 comme deux déclarations distinctes, la première est une tâche au moment de la compilation et la seconde est une tâche au moment de l'exécution. Cela signifie que peu importe où une déclaration apparaît dans la portée, elle sera traitée en premier avant que le code lui-même ne soit exécuté. Vous pouvez visualiser ce processus comme si toutes les déclarations (variables et fonctions) étaient « déplacées » vers le haut de leurs portées respectives. Ce processus est appelé promotion. Veillez à éviter les déclarations répétées, en particulier lorsque les déclarations var ordinaires et les déclarations de fonction sont mélangées, sinon de nombreux problèmes dangereux se produiront !

Chaîne de portées

Variables libres : variables qui ne sont pas définies dans la portée actuelle, mais sont définies dans la portée supérieure et peuvent être utilisées dans cette portée.
Chaîne de portée : lorsque vous utilisez une variable, recherchez-la d'abord dans sa propre portée. Si elle n'est pas trouvée, recherchez-la dans la portée parent jusqu'à ce qu'elle trouve la portée globale. Si elle n'est pas trouvée, une erreur sera signalée. .

Portée au niveau du bloc

js n'a pas de portée au niveau du bloc, seulement une portée globale et une portée de fonction.
ES6 implémente la portée de js au niveau du bloc grâce à l'implémentation spéciale de la portée globale let;
la portée effective est { };
const est une constante définie. Remarque : L'adresse mémoire où la valeur d'une constante définie est stockée ne peut pas être modifiée. Si la valeur est variable, par exemple, lorsque la constante est définie comme un tableau ou un objet, les données d'origine peuvent être manipulées via la méthode tableau ou objet. Tant que la valeur n'est pas réaffectée, il n'y aura pas de problème.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer