javascript - 方法调用中的 var 未重新定义

javascript - var in method call not redefined

我编写了一个完美运行的代码,但是当我将硬编码参数切换到一个变量时,我遇到了一个我理解但不知道如何解决的问题。另外,我不知道是否有任何一种模式可以解决这个问题。

var IsIframeAdded = (function(){

    var nr_of_elem = 0;
    var elem;

    events.subscribe( elem + "Loaded", function(length){
        disableIframes(elem);
        nr_of_elem = length;
    });
    //events.subscribe() must be placed above checkIfElemAdded()


    var checkIfElemAdded = function() {
        elem = functional.scripts[0].class;  //Change-set the value of elem variable

        if ( is_page() || is_page('shop') || is_page('portfolio') || is_page('fl-studio-song-starter') ) {
            domCallback.isElemAdded( elem, nr_of_elem ); //check if iframe is added to the DOM
        }
    };


    events.subscribe( "JSONloaded", checkIfElemAdded );
    events.subscribe( "loadMoreClicked", checkIfElemAdded );

})(); // !isIframeAdded


$('.music-portfolio-query').on('click', '.showmore-btn', function(){
    events.publish( "loadMoreClicked" );
});
    enter code here

因为我在代码中用注释做了标记,所以我必须将 events.subscribe() 保留在名为 checkIfElemAdded 的函数之上。这样我就避免在 domCallBack.isElemAdded()

的响应中使用 setTimeout()

我已经提到我理解这个问题所以我会尝试描述它:

Events.subscribe() 没有监听正确的事件名称。

问题出在 events.subscribe() 方法调用中的 elem 变量 该变量是在脚本加载时设置的,这对于使用从 JSON 文件中提取的元素设置变量来说还为时过早。 该调用中的变量 elem 应在 JSONloaded 事件之后加载。 (我试图避免 setTimeout 解决方案)

是否有经验丰富的开发人员可以帮助我解决这个问题?

谢谢

我自己找到了解决方案,所以如果有人需要它,就在这里。

var IsIframeAdded = (function(){

    var nr_of_elem = 0;
    var elem;

    var checkIfElemAdded = function() {
        elem = functional.scripts[0].class;  //Change-set the value of elem variable


        events.subscribe( elem + "Loaded", function(length){
            disableIframes(elem);
            nr_of_elem = length;
        });
        //events.subscribe() must be placed above domCallback.isElemAdded()


        if ( is_page() || is_page('shop') || is_page('portfolio') || is_page('fl-studio-song-starter') ) {
            domCallback.isElemAdded( elem, nr_of_elem ); //check if iframe is added to the DOM
        }
    };


    events.subscribe( "JSONloaded", checkIfElemAdded );
    events.subscribe( "loadMoreClicked", checkIfElemAdded );

})(); // !isIframeAdded


$('.music-portfolio-query').on('click', '.showmore-btn', function(){
    events.publish( "loadMoreClicked" );
});