suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Sollte man es vermeiden, Funktionen innerhalb von Funktionen zu deklarieren (außer bei absichtlichen Schließungen)?

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

Der Funktionstest wird jedes Mal deklariert, wenn darauf geklickt wird, und dann wird der Click-Callback ausgeführt und GCed. Wenn der Dom mehr als einmal angeklickt wird, hat jeder Click-Callback eine weitere Funktionsdeklaration Erlauben Sie das Schreiben von Funktionsdeklarationen. Ist die aktuelle Situation in der Schleife nicht ähnlich? Was ist also der beste Weg, damit umzugehen? Sollte ich die Deklarationsposition der Testfunktion nach außen verschieben? Dies führt dazu, dass die Testfunktion nicht wiederverwendet werden kann. Wenn der Benutzer diese Logik nur einmal verwendet, wird dies offensichtlich der Fall sein ein Verlust. Was soll ich tun? ~

迷茫迷茫2754 Tage vor560

Antworte allen(3)Ich werde antworten

  • 过去多啦不再A梦

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

    循环里跟函数里是不一样的。

    循环里并不是一个独立的作用域,所以在里面声明函数会声明提前,函数里则不会。jshint防止的是重复定义。

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

    b只有在a函数执行的才会被声明,并且如果没有任何外部引用指向b,则在函数执行完下一轮回收后被销毁。

    实际上差别不大。

    Antwort
    0
  • 世界只因有你

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

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

    test 用完就丢了,并不会无法回收。

    Antwort
    0
  • 为情所困

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

    如果只执行一次的话, 可以这样:

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

    定义的foo不会影响外面, 用完立即卸载等待回收.
    干干净净, 深藏功与名

    Antwort
    0
  • StornierenAntwort