在下面的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