在下面的JavaScript代码:混乱了在JavaScript中的功能与性能参考
function foo() {
foo.val = foo.val || 'no val';
return 'foo has ' + foo.val;
};
function bar() {
bar.val = bar.val || 'no val';
return 'bar has ' + bar.val;
};
var a = foo;
foo.val = '1';
bar.val = '2';
a.val = '3';
foo = bar;
'foo says "' + foo() + '", bar says "' + bar() + '", a says "' + a() +'"';
我期望是:
富说:“酒吧已2”,显示的是“棒有2" 个,一个说 “富有3个”
然而,从Firebug控制台在Firefox 10.0.2上运行时,我得到:
富说:“酒吧已2”,显示的是“酒吧有2个”,一个说“富已经2”
谁能向我解释事件的是那张幕后的顺序进行这是吗?为什么a
保留绑定到原始foo
函数(我所期望的),但保留bar
的值为val
?
+1。这是令人困惑的解释,但我认为你做得比我做得更好。 – nnnnnn 2012-03-02 01:36:41
不需要图表,这是一个很好的解释。我正在寻找一种方法来引用没有'arguments.callee'的函数,因为它在ES5严格模式下引发了一个TypeError。我想我必须小心,不要重新分配我的功能。 – beldaz 2012-03-02 01:42:43