0

在另一个函数中调用一个函数最直接的方法是什么?

我有:

function carousel_animation(){

            $(carousel).transition({y: m + '=10', queue: false});

            $('article div').promise().done(function(){
                $(this).transition({x:2000}, 500, 'easeInCirc');
            });

            $('article div').promise().done(function(){
                $(this).css({x:'-500'}).transition({x:'0'}, 1500, 'easeInOutQuart');
                $(carousel_reset).css({opacity:0});

                $(carousel_content)
                .css({opacity:100, duration:1500});
            });

};

我需要在这个由点击触发的函数中调用它:

function carousel_4way (n, el, m) {
        // remove outline from clicked element
        el.blur();

        // animate
        var carousel = '#carousel-4way-nav-' + n
        var carousel_content = '#carousel-4way-' + n
            transitionState  = (transitionState == '-') ? '+' : '-';

        **// I want the function to be placed inside, here**


        transitionState2 = '-';
        transitionState3 = '-';
        transitionState4 = '-';

    };

所以它就像一个非常重复的函数,需要在我的代码中多次使用。我怎么做?


我使用 Robert Koritnik 的建议重写了代码,它正在工作:

function karuzela(n,el,m){  
    var carousel = '#carousel-4way-nav-' + n
    var carousel_content = '#carousel-4way-' + n

    function carousel_4way(){
        el.blur();
            transitionState  = (transitionState == '-') ? '+' : '-';
            $(carousel).transition({y: m + '=10', queue: false});
            };

    function carousel_animation(){

            $('article div').promise().done(function(){
                $(this).transition({x:2000}, 500, 'easeInCirc');
            });
            $('article div').promise().done(function(){
            $(this).css({x:'-500'}).transition({x:'0'}, 1500, 'easeInOutQuart');
            $(carousel_reset).css({opacity:0});
            $(carousel_content)
            .css({opacity:100, duration:1500});
            });

            transitionState2 = '-';
            transitionState3 = '-';
            transitionState4 = '-';

    };
    carousel_4way()
    carousel_animation()
};

但是,现在我看不到将这两个嵌套函数放在外面并像这样单独使用它们的方法:

function karuzela(n,el,m){
  var carousel = '#carousel-4way-nav-' + n
  var carousel_content = '#carousel-4way-' + n
    carousel_4way()
    carousel_animation()
};
4

2 回答 2

1

您遇到的问题是变量范围

... 以及它们在各个功能中的可见性。当您尝试调用您的函数时,您可能会收到carousel未定义其他变量的错误。

尝试更改您的函数以具有此签名:

function carousel_animation(carousel, carousel_content, carousel_reset, m)
{
    ...
}

或者因为您是从其他变量生成这些选择器,所以只需传递这些:

function carousel_animation(n, el, m)
{
    var carousel = '#carousel-4way-nav-' + n;
    var carousel_content = '#carousel-4way-' + n;
    ...
}

对于我们不知道的相同功能的其他用途,这可能不可行。但是您必须注意变量范围。例如,您的carousel变量对于carousel_4way函数来说是本地的,因此其他函数(如果未在同一函数中定义)将看不到它。因此,您必须:

  • 将两个函数都放在私有函数范围内,并在该范围内定义这些变量,以便两个函数都可以看到:
  • 不建议将共享变量设为全局,因为这会打开完全不同的蠕虫罐,因为您的变量值可能会开始发生意外的事情
于 2013-02-13T13:07:32.450 回答
0

调用它

// I want the function to be placed inside, here
carousel_animation()
于 2013-02-13T13:06:52.157 回答