2013-11-25 2 views
2

Этот код дает мне ошибку: SCRIPT5002: Function expectedIE10 Javascript "Функция Ожидаемое"

var callIt = function(func) { func(); } 

ПОЧЕМУ !? Это как это пытается сделать проверку типа или что-то

EDIT: использование случай

var callIt = function(func) { func(); } 
function nextSlide() { 
    var fn = currSlide ? currSlide.hide : callIt; 
    currSlide = setupSlides[++slideIdx]; 
    fn(currSlide.show()); 
} 

DOH!

+3

и что вы переходите в 'callIt' в качестве параметра? –

+0

функция. 'callIt' должен служить функцией tmp для замены функции анимации jquery. Например: '(currentSlide? CurrentSlide.hide: callIt) (nextSlide.fadeIn)' –

+0

@MarkusOrreilly: Показать вызов 'callIt', вот где ошибка. –

ответ

7

Ваш код:

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. Если вы позвоните позже, это, скорее всего, потерпит неудачу, потому что ожидается, что будет означать что-то конкретное.

Если вы можете рассчитывать на имеющие признаки из 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; 

... но в тот момент я подозреваю, отступая назад и пересматривают может быть в порядке.

Смежные вопросы