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

Faut-il éviter de déclarer des fonctions au sein des fonctions (sauf pour les fermetures intentionnelles) ?

$('.dom').on('click', function () {
    function test() {
        console.log('abc');
    } 
});

Le test de fonction est déclaré à chaque clic, puis le rappel de clic est exécuté et GCé. Si le dom est cliqué plus d'une fois, chaque rappel de clic aura une déclaration de fonction supplémentaire. Je me souviens que la spécification jshint n'en a pas. autoriser l'écriture de déclarations de fonctions. La situation actuelle dans la boucle n'est-elle pas similaire ? Alors, quelle est la meilleure façon de gérer cela ? Dois-je déplacer la position de déclaration de la fonction de test vers l'extérieur ? Cela entraînera une fermeture et la fonction de test ne pourra pas être recyclée. Si l'utilisateur n'utilise cette logique qu'une seule fois, elle le sera évidemment. une perte. Que dois-je faire? ~

迷茫迷茫2733 Il y a quelques jours534

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

  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-19 10:25:40

    Il y a une différence entre une boucle et une fonction.

    La boucle n'est pas une portée indépendante, donc y déclarer la fonction sera déclarée à l'avance, mais pas dans la fonction. jshint empêche les définitions en double.

    function a() {
        function b() {
        }
    }

    b ne sera déclaré que lorsque la fonction a est exécutée, et s'il n'y a pas de référence externe pointant vers b, elle sera détruite après que la fonction exécute le prochain cycle de recyclage.

    En fait, il n’y a pas beaucoup de différence.

    répondre
    0
  • 世界只因有你

    世界只因有你2017-05-19 10:25:40

    function test(message) {
      console.log(message);
    }
    
    $('.dom').on('click', function () {
      test('abc')
    });

    Le test est jeté après utilisation, il ne sera pas irrecyclable.

    répondre
    0
  • 为情所困

    为情所困2017-05-19 10:25:40

    Si vous ne l'exécutez qu'une seule fois, vous pouvez faire ceci :

    var elem = $('.dom'); 
    elem.on('click', (function() {
        return function foo(e) {
            // do something...
            elem.off('click', foo);
        };
    }()));

    Le foo défini n'affectera pas le monde extérieur. Désinstallez-le immédiatement après utilisation et attendez le recyclage
    Propre et propre, cachant le mérite et la renommée

    .

    répondre
    0
  • Annulerrépondre