Как из IIFE функции передать параметр в другую IFFE функцию?

В app.init (в последней строчке этого метода) мне нужно передать параметры (moviesList, rowMoviesToShow, rowMoviesHeight, maxItemsInRow) в модуль More. Пробую сделать это так:

//модуль more

const more = (function(moviesList, rowMoviesToShow, rowMoviesHeight, maxItemsInRow){
  
    return {
        init: function(){
            btnMore.addEventListener('click', this.addMoviesRow);
        },
        addMoviesRow:  function () {
        let arrMoviesItems = [...moviesList.children],
        activeMovies = app.mainMethods.getActiveMovies(arrMoviesItems).length,
        maxRows = Math.ceil(activeMovies / maxItemsInRow),
        maxHeightMoviesRows = maxRows * rowMoviesHeight;

    if ((moviesList.offsetHeight + (rowMoviesHeight * rowMoviesToShow) >= maxHeightMoviesRows)) {
        moviesList.style.height = maxHeightMoviesRows + 'px';
        btnMore.style.backgroundColor = 'black';
        btnMore.style.cursor = 'auto';
        btnMore.removeEventListener('click', addMoviesRow);
    }
    else {
        moviesList.style.height = moviesList.offsetHeight + (rowMoviesHeight * rowMoviesToShow) + 'px';
    }
        }
    }  
})(moviesList, rowMoviesToShow, rowMoviesHeight, maxItemsInRow)



//app
const app = (function(){

        const moviesList = document.querySelector('.movies-list'),
        moviesItem = document.querySelector('.movies-list__item');

        let rowMoviesToShow = 2,
        rowMoviesHeight = moviesItem.offsetHeight + 30,
        maxItemsInRow = Math.floor(moviesList.offsetWidth / moviesItem.offsetWidth);

        return {
            init: function(){
                _this = this;
                document.addEventListener("DOMContentLoaded", function () {
               
                    moviesName.forEach(_this.mainMethods.lineBreak);
                    
                    if (window.screen.width >= 992) {
                        moviesList.style.overflow = 'hidden';
                        moviesList.style.height = rowMoviesHeight * rowMoviesToShow + 'px';
                    }
                    
                    search.init();  
                    more.init(moviesList, rowMoviesToShow, rowMoviesHeight, maxItemsInRow);
                
                })
            },
            mainMethods: {
                lineBreak: function(element){
                    if (element.innerText.length >= 26) {
                        element.innerText += ', ';
                        element.style.display = 'inline';
                    } 
                },
                getActiveMovies: function(arrMoviesItems) {
                let arr = [];
                for (let i = 0; i <= arrMoviesItems.length - 1; i++) {
                    if (!arrMoviesItems[i].classList.contains('hidden')) {
                        arr.push(arrMoviesItems[i]);
                    }
                }
                return arr;
            }
            },
            mainProps: {

            }
        }
    })();

app.init();

Но в итоге в модуле more все эти параметры undefined. (Uncaught ReferenceError: moviesList is not defined)

Если переменные, которые я хочу передать в more, вынести из app. Т.е. так:

    const moviesList = document.querySelector('.movies-list');

    let rowMoviesToShow = 2,
    rowMoviesHeight = moviesItem.offsetHeight + 30,
    maxItemsInRow = Math.floor(moviesList.offsetWidth / moviesItem.offsetWidth);

 const app = (function(){/*...some code*/})()

То все работает и параметры уже не undefined.


Ответы (0 шт):