Ich schaue mir diesen Vortrag an: http://www.youtube.com/watch?v=Kq4FpMe6cRs
// the speaker states that "'bar' is just some function
// that invokes whatever function is passed to it"
function bar(fn) {
fn();
}
function foo() {
var x = 8;
bar(function baz() { return x; });
}
Object.prototype.x = 'foo';
In Minute 35 wird das oben beschriebene Thema behandelt. Der Dozent erklärt, dass einige Browser Folgendes zurückgeben foo
代わりに 8
.
Warum?
Übrigens, während ich diese Frage schrieb, habe ich es herausgefunden, aber ich werde diese Frage trotzdem stellen, weil es ein interessantes Thema ist. :)
Live-Demo: http://jsfiddle.net/simevidas/mHyKc/
Opera 11-Warnungen 'foo'
alle anderen Browser (einschließlich IE9) geben 8
.
更新しています: Ich nehme zurück, was ich gesagt habe, dass ich das herausgefunden habe. Es hat etwas damit zu tun, dass die verschachtelte Funktion eine benannte Funktion ist. Wenn Sie den Namen entfernen ( baz
), dann gibt Opera 8
was bedeutet, dass das Problem nur bei benannten verschachtelten Funktionen auftritt.
Aber warum?