即时对象初始化混淆

Immediate object initialization confusion

本文关键字:初始化 对象      更新时间:2023-09-26

我正在研究一个使用JScroll的js文件。jsp-scroll-y事件的回调在以下函数中定义

 function initWall() {
     //callback from jqueryscrollpane
     Scroll_TimeLine_Instance = function (event, scrollPositionY, isAtTop, isAtBottom){     
         //get more content
         if (isAtBottom) {
             GetMoreDate(objid, vwrsid, secid, orgid, incflwr, qty, mintlid, maxtlid, successGetTimeLineCallback, failureGetTimeLineCallback);
         }
     }();
}

定义了另一个函数,然后将此回调绑定到 jsScroll

function reapplyScroll() {
     Utilities.DestroyScrollBar($(_target).closest('.widgetBody'));
     Utilities.ApplyScrollBar($(_target).closest('.widgetBody'), false, Scroll_TimeLine_Instance);
            }
Utilities.ApplyScrollBar = function (element, showScrollBar, scrollCallback) {
    $(element).jScrollPane({
        horizontalGutter: 5,
        verticalGutter: 5,
        'showArrows': false
    }).bind('jsp-scroll-y', scrollCallback);
    if (!showScrollBar) {
        $(element).find('.jspDrag').hide();
    }
}

从未调用过回调,我发现这是因为它未定义。如果我删除Immediate object initialization((;从创建函数后开始,一切正常。

谁能解释一下?我不明白为什么它被立即调用,所以我认为这是创建它的人的错误,我不知道为什么它会导致这个变量未定义?

之所以undefined,是因为函数(立即调用(不return任何值

所以看起来这确实是图书馆的错误。


要么删除末尾的();,要么如果你也想在那里调用它,只需在下一行中调用它

function initWall() {
     //callback from jqueryscrollpane
     Scroll_TimeLine_Instance = function (event, scrollPositionY, isAtTop, isAtBottom){     
         //get more content
         if (isAtBottom) {
             GetMoreDate(objid, vwrsid, secid, orgid, incflwr, qty, mintlid, maxtlid, successGetTimeLineCallback, failureGetTimeLineCallback);
         }
     }; /// this is assigning the function to our variable
     Scroll_TimeLine_Instance (); // this is the invokation
}