迷失在JavaScript范围内

时间:2011-07-12 04:42:09

标签: javascript event-handling scope

有人可以帮我解决下面的(简化)代码。我正在尝试从幻灯片事件函数中调用doTheSlide()函数。我对JS的范围的理解仍然有点阴暗。

实现这一目标的正确方法是什么?我收到了这个错误:

  

Uncaught TypeError: object is not a function

(function($) {

    bindEvent = function(slider) {

        slider.bind('slide', function(event, ui) {

            doTheSlide(ui.value);
        });
    }

    doTheSlide = function(value) {
        //Animate the slide
    }


    var methods


})(jQuery);

1 个答案:

答案 0 :(得分:5)

你需要在某处声明'doTheSlide'。您似乎将其用作全局函数,这在大多数情况下都是错误的。确保所有内容都正确声明(使用var或使用命名函数)。

以下是您的代码的固定版本(我喜欢它的方式):

(function($) {
    function doTheSlide(value) {
        //Animate the slide
    }

    function bindEvent(slider) {
        slider.bind('slide', function(event, ui) {
            doTheSlide(ui.value);
        });
    }
})(jQuery);

请记住在使用函数之前声明它们。它可以调用稍后声明的函数,但它不是好的样式。

替代语法:

(function($) {
    var doTheSlide = function(value) {
        //Animate the slide
    };

    var bindEvent = function(slider) {
        slider.bind('slide', function(event, ui) {
            doTheSlide(ui.value);
        });
    };
})(jQuery);