外层函数在return时,调用内层函数,没有返回内层函数的调用结果

为了获取元素据body的高度偏移量,写了下面这个函数:

function getTop(ele){
    var top=0;//设定初始值
    function getEleTop(ele){
        top+=ele.offsetTop; //top储存ele的offsetTop
        if(ele.tagName.toLowerCase()=='body'){  //如果ele现在是body,就返回top值
            return top;
        }else{
            getEleTop(ele.offsetParent); //否则,就继续调用这个函数,获得ele的定位父元素的offsetTop
        }
    }
    return getEleTop(ele);
}

外层getTop()包裹内层getEleTop(),我想用来隐藏top变量,以免暴露出去。

内层getEleTop(),我本意想用top来储存ele的offsetTop,然后用top叠加ele的定位父元素(假设为faEle)相对于其定位父元素(假设为paEle)的offsetTop。直到叠加到body为止。
这样就可以获得ele相对于body的高度偏移量。

最后内层函数返回top。

我用外层函数在return的时候,调用内层的getEleTop(ele),最后并没有得到top的值。

经过一番调试,我发现是内层函数没用return top。所以外层函数返回的是undefied。

如果外层函数直接是 return top,就可以准确返回。

但是为什么内层函数没有返回top呢?

希望各位大神讲解一下!谢谢!

阅读 3.9k
2 个回答
return getEleTop(ele.offsetParent);
function getTop(ele){
    var top=0;//设定初始值
    function getEleTop(ele){
        top+=ele.offsetTop; //top储存ele的offsetTop
        if(ele.tagName.toLowerCase()=='body'){  //如果ele现在是body,就返回top值
            return top;
        }else{
            // 这里没有return出去
            return getEleTop(ele.offsetParent); //否则,就继续调用这个函数,获得ele的定位父元素的offsetTop
        }
    }
    return getEleTop(ele);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题