从另一个函数内部调用私有函数

时间:2015-04-25 12:39:49

标签: javascript jquery structure private public

我无法从另一个内部调用内部函数。我需要能够在页面加载时调用funcA传递一个元素和一些尺寸,然后将一些样式应用于传递元素。 funcB然后使用所述参数来正确调整元素的大小:

var funcA = function(elem, width, height) {

     //performs layout restyle
     function funcB() {
          //performs sizing 
     }

     funcB();
}

然而,问题是我需要从debounced调整大小函数中调用funcB,就像这样。

function debounce(func, wait, immediate) {
    var timeout;
    return function() {
        var context = this, args = arguments;
        var later = function() {
            timeout = null;
            if (!immediate) func.apply(context, args);
        };
        var callNow = immediate && !timeout;
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
        if (callNow) func.apply(context, args);
    };
};
var resizeFn = debounce(function() {

    funcB();

}, 10);

$(window).on('resize', resizeFn);

制作funcB的最佳做法是什么?我一直在考虑将其返回,然后将其缓存到变量:

var funcA = function(elem, width, height) {

     //performs layout restyle
     function funcB() {
          //performs sizing 
     }

     funcB();

     return funcB
}

var scopedFuncB = funcA;

scopedFuncB();

但是有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

  

我一直在考虑将其归还

是的,这绝对是最好的做法。因此呼叫者可以决定如何使用它以及何时以及多久调用它。

  

...然后将其缓存到变量

实际上不需要那样做。您可以直接将其传递给debounce,而无需进一步说明:

$(window).on('resize', debounce(funcA(elem, width, height), 10));

答案 1 :(得分:0)

为什么不让funcA返回一些内容然后funcB将其funcA的输出作为参数接收?

答案 2 :(得分:0)

以下是两个选项:

var funcA = function(elem, width, height) {
    if(!(this instanceof funcA)){
         return new funcA(elem, width, height);   
    }
     //performs layout restyle
     this.funcB = function() {
          //performs sizing 
     }
}

funcA(elem, width, height).funcB();

var funcA = function(elem, width, height) {
     //performs layout restyle
     var funcB = function() {
          //performs sizing 
     }
     window.funcB = funcB;

}

funcA(elem, width, height);
funcB();