我无法从另一个内部调用内部函数。我需要能够在页面加载时调用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();
但是有更好的方法吗?
答案 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();