2014-05-13 6 views
8

Sehr einfaches Skript:Anruf Javascript-Funktion von Chrome Entwicklerkonsole

function foo(){ 
    return "bar" 
} 

console.log(foo()); 

Konsole:

> bar // sanity test that proves everything's working 
> foo(); // this guy is key! 
> ReferenceError: foo is not defined 

Wie soll ich foo() aufrufen; zum Debuggen und Experimentieren?

Ist das nicht eine Übung? Ich liebe IRB/Rails-Konsole mit meinem Ruby-Code zu überprüfen und das gleiche mit JavaScript

http://jsfiddle.net/m2muL/

+3

'foo' nicht öffentlich –

+0

ausgesetzt sein muss ich gestehen, ich bin nicht 100% sicher, was Sie damit meinen. Meinst du es kann nicht aus dem globalen Bereich zugegriffen werden? Und was nicht? – Starkers

+0

Das Problem hier ist, dass wir nicht reproduzieren können, was Sie sagen, dass Sie sehen. – bfavaretto

Antwort

8

das Problem tun möchte, ist, dass Ihre foo Funktion nicht Teil des globalen Bereich ist. Die Konsole hat im Wesentlichen Zugriff auf alles, was window tut. Wenn es dort nicht definiert ist, ist es in der Konsole nicht definiert. Zum Beispiel könnte dies ein Beispiel dafür sein, dass foo nicht in der Konsole verfügbar ist.

(function(){ 
    function foo(){ 
    return "bar"; 
    } 
    console.log(foo()); //"bar" 
})() 

console.log(foo()); //ReferenceError: foo is not defined 

Suchen Sie nach einem Weg, wo diese Methode verfügbar gemacht wird. Wenn es sich in einem Objekt oder einer Methode befindet, vergewissern Sie sich, dass Sie von Ihrer Konsole darauf verweisen.

var foobar = { 
foo: function(){ return "bar" ;} 
}; 

console.log(foobar.foo()); //"bar" 

Wenn Sie foo nicht referenzieren können, dann können Sie es nicht anrufen.

+0

Ich kann das tun. Ist es eine gute Übung, Objekte in Javascript/jquery zu erstellen und verwandte Funktionen darin zu speichern? Anstatt dass Funktionen im globalen Rahmen herumschweben? – Starkers

+0

@Starkers - Es empfiehlt sich, nur eine globale Variable zu verwenden, die die Lebensdauer und die Definitionen aller Funktionen enthält. Dies ist der Grund, warum jQuery zum Beispiel genommen wird, alle ihre API sind unter $ oder jQuery und das ist der einzige Zugang. In der Regel erfolgt dies durch Internalisierung eines Prototyps und Rückgabe einer gebauten Instanz. –

2

Sie versuchen dies in JSFiddle zu tun, das Ihr JavaScript von Ihrer Konsole "versteckt". Es ist nicht wirklich in Reichweite für Sie auszuführen. Es funktioniert nicht dort, wie Sie davon ausgehen, dass es wird ...

Wenn Sie eine einfache HTML-Datei erstellt und stecken Sie Ihr Javascript dort zwischen Tags, würden Sie kein Problem haben "foo()" in der Konsole laufen.

erstellen test.html und setzen diese im Inneren:

<script> 
function foo(){ 
    return "bar" 
} 
console.log(foo()); 
</script> 
+0

http://jsfiddle.net/m2muL/1/ Funktioniert nicht für mich Ich habe Angst. – Starkers

+0

Ich bekomme 'bar'' bar', wie ich es erwarte, aber beim Ausführen von 'foo();' bekomme ich den undefinierten Fehler? – Starkers

+0

Nicht sicher, ob wir das Gleiche machen. Öffne den Notizblock, füge den Code in meine Antwort ein und speichere test.Html. Dann öffne test.html in Chrome, öffne die Konsole und tippe "foo();" –

Verwandte Themen