Erklärung gesucht für das seltsame Verhalten

FipsTheThief

Erfahrenes Mitglied
Grob geht es darum hier , durch den Code sieht man es schneller denn erklären kann ich mir das selber auch nicht wirklich.

Code:
function Test(){}

Test.statisch = function(){
    console.log("eigentlich dürfte ich hier nie ankommen");
}

// annonyme funktion wie bei jQuery Plugins zum Beispiel.
( function(a){ console.log("foobar") } )();

Die große Frage ist die auftaucht, sobald ich eine annonyme Funktion hinzubringe wei bei jQuery Plugins üblich, geht der einfach in die statische Funktion rein. Aber warum ?

Ich habe es nun im Chrome und IE probiert, in beiden der gleiche Fehler.

die Konsole:
Code:
eigentlich dürfte ich hier nie ankommen  ..... zeile 8 
undefined is not a function ..   zeile 10 (anonymous function)
 
Hi,

beginne die Zeile, die den Aufruf der anonymen Funktion beinhaltet mit einem Semikolon:
Code:
;( function(a){ console.log("foobar") } )();
Eine Erklärung kann ich dir hierfür jetzt nicht geben - aber es sollte funktionieren.

Ciao
Quaese
 
Da bekommst die Motten das geht tatsächlich, aufgefallen ist mir sobald ich die Annonyme Funktion in einer Variable speicher, bzw den Rückgabewert davon tritt das auch nicht auf. Ebenfalls dann nicht wenn es vor der statischen Funktion kommt.

Nun gut merkwürdig aber klappt und vielen Dank Dir :)
 
Also eigentlich geht es eher darum die Zeile wo du Test.statisch zuweisst mit einem Semikolon zu beenden, nicht die andere Zeile mit einem Semikolon zu beginnen ;)

Denn was du da machst ist, du übergibst die anonyme foobar Funktion als Parameter zur Funktion die eigentlich nie ausgeführt werden darf. Auch weist du nicht die Funktion an Test.statisch zu, sondern deren Rückgabewert.

Javascript:
Test.statisch = function(param){
    console.log(param);
    console.log("eigentlich dürfte ich hier nie ankommen");
}( function(a){ console.log("foobar") } )();
Test.statisch ist danach nicht definiert.


Hier ein weiteres Beispiel:
Javascript:
function Test(){}
 
Test.statisch = function(param){
    console.log(param);
    console.log("eigentlich dürfte ich hier nie ankommen");
    return "testvalue";
}( function(a){ console.log("foobar") } );

console.log(Test.statisch);


`console.log(Test.statisch);` Wird "testvalue" zurückgeben, da die Funktion dies zurück gibt und das dann so an Test.statisch zuweist.
 

Neue Beiträge

Zurück