3 Stimmen

wie kann ich eine selbstausführende JS-Funktion später aufrufen, wenn ich möchte?

Ich versuche, eine Funktion zu schreiben, die sofort ausgeführt wird, aber auch später ausgeführt werden kann:

var test = function (e){ console.log('hello'+e); }();
$('#some\_element').click(function(e){
    test(' world');
});

in diesem Fall wären die Ergebnisse, die ich mir wünschen würde, folgende:

helloundefined
hello world

Ich verstehe nicht, warum der Aufruf von test später "test ist keine Funktion" zurückgibt.

6voto

icktoofay Punkte 121675

Sie definieren test wie diese:

var test = function (e){ console.log('hello'+e); }();

Dadurch wird ein Abschluss erstellt und sofort aufgerufen. Da es keine explizite return in der Schließung, gibt sie undefined . Jetzt test enthält undefined . Später, im Rahmen des Abschlusses, der an click versucht es, die test . test ist noch undefined . Am Ende macht man so etwas wie das hier:

undefined(' world');

Sie sagen, Sie wollten diese Ausgabe:

helloundefined
hello world

In diesem Fall können Sie Folgendes tun:

var test = function test(e) { console.log('hello'+e); return test; }();

Als Nebeneffekt macht es auch test verkettbar, so dass Sie dies tun können:

test(" world")(" stack overflow")(" internet");

Und das Ergebnis (ohne die erste helloundefined ) sein:

hello world
hello stack overflow
hello internet

4voto

Jon Punkte 411383
var test = function (e){ console.log('hello'+e); }();

Die Klammern am Ende bedeuten, dass test ist die Ergebnis der Auswertung eines Funktionsaufrufs (d.h. der Rückgabewert der Funktion), nicht die Funktion selbst.

Versuchen Sie dies:

var testFunc = function (e){ console.log('hello'+e); };
testFunc();
$('#some_element').click(function(e){
    testFunc(' world');
});

3voto

meouw Punkte 40856
var test;
(test = function( e ) { console.log('hello'+e); } )(); //helloundefined

test( ' world' ); //hello world

1voto

JW. Punkte 48942

Sie ordnen die Rückgabewert der Funktion zu test und nicht die Funktion selbst. Ich glaube nicht, dass Sie die selbstausführende Abkürzung verwenden können, wenn Sie sie auch einer Variablen zuweisen wollen. Das müssen Sie tun:

var test = function (e){ console.log('hello'+e); };
test();
$('#some_element').click(function(e){
    test(' world');
});

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X