您的代碼:
fn(currSlide.show());
... 電話currSlide.show()
和調用它變成fn
傳遞的返回值,完全相同的方式foo(bar())
電話bar
並將其返回值到foo
。
由於show
的返回值不是函數,所以會出現錯誤。你可能意味着:
fn(function() { currSlide.show(); });
但是請注意,您在這裏有一個問題:
var fn = currSlide ? currSlide.hide : callIt;
如果currSlide
是truthy,你會得到的hide
函數的引用,但該功能是而不是以任何方式連接到currSlide
。如果稍後調用它,可能會失敗,因爲它期望this
意味着某些特定的事情。
如果你可以依靠具有ECMAScript5(這樣,您使用的是IE8等新版瀏覽器和/或你包括「ES5墊片」,您可以修復與Function#bind
特點:
var fn = currSlide ? currSlide.hide.bind(currSlide) : callIt;
或者如果你使用jQuery,您可以用jQuery的$.proxy
解決它:
var fn = currSlide ? $.proxy(currSlide.hide, currSlide) : callIt;
這兩項的返回一個新的函數,調用它時,會調用目標函數與給定this
值。
如果你不使用ES5或jQuery的,那麼,這將做到這一點:
var prevSlide = currSlide;
var fn = prevSlide ? function(func) { prevSlide.hide(func); } : callIt;
......但在這一點上,我懷疑退一步重新評估,並可能是爲了。
和你傳入'callIt'作爲參數的是什麼? –
一個函數。 'callIt'是作爲一個tmp函數來替換jquery動畫函數。例如:'(currentSlide?currentSlide.hide:callIt)(nextSlide.fadeIn)' –
@MarkusOrreilly:顯示對'callIt'的調用,這就是錯誤所在。 –