recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Problème de portée variable js

    // 立即执行函数写法,保证外部不能访问到 count
    var module1 = (function() {
        var count = 0;
        var m1 = function() {
            return count;
        };
        return {
            m1: m1
        };
    })();
    // 如果现在想给 module1 添加新的方法
    module1 = (function(mod) {
        mod.m2 = function() {
            return count;
        }
        return mod;
    })(module1);
    console.log(module1.m1());//可以访问到 count
    // console.log(module1.m2());

Je me demande pourquoi module1.m2() 访问不到 count ?

代言代言2730 Il y a quelques jours731

répondre à tous(2)je répondrai

  • 代言

    代言2017-06-12 09:30:08

    Un indice : la raison pour laquelle m1 peut accéder à count est que m1 et count sont déclarés dans la même fonction, c'est-à-dire qu'ils sont dans la même portée, mais la fonction où se trouve m2 n'est pas dans la même fonction que count. la portée, il n'y a aucune relation entre les fonctions intégrées dans les fonctions, donc naturellement elles ne sont pas accessibles.

    Le questionneur pense que module1 lui-même est sous la même fonction que count, il ajoute donc une méthode à module1. Cette méthode est sous la même portée que count ?

    répondre
    0
  • typecho

    typecho2017-06-12 09:30:08

    En raison de la portée lexicale, les fonctions JS ont une portée statique, ce qui signifie que lorsque la fonction est définie, il a été déterminé sur quel symbole la variable à l'intérieur doit être montée. Lorsque vous définissez m1 en interne, la fonction anonyme renvoie un décompte. sera déterminé comme étant externe à cette fonction lorsqu'elle sera définievar count=0.

    Lorsque vous définissez m2, la fonction anonyme renvoie un nombre. La recherche de symbole pour ce nombre consiste d'abord à vérifier s'il se trouve à l'intérieur de l'endroit où il est défini. Sinon, vérifiez l'endroit où la fonction de couche supérieure est définie, et alors l'endroit le plus extérieur est une variable globale, donc le nombre ici est une variable globale.

    Donc module1.m2() ne peut pas accéder à la variable count que vous avez définie sur m1 En raison de la portée lexicale statique, m2 ne peut pas la suivre.

    répondre
    0
  • Annulerrépondre