Как передать переменные в функцию IIFE в качестве глобальных аргументов? - PullRequest
0 голосов
/ 04 ноября 2019

Я хочу передать local variables в IIFE (шаблон модуля) как global arguments, но я понятия не имею, как мне это сделать.

Здесь у меня есть один из моих модулей, который нуждаетсячтобы получить variables как arguments вне области видимости модуля:

const Event = (function(flag, length) {
    console.log(flag, length);

    function drive(target, event, callback) {
        let isStringArray = Array.isArray(event);
        if (isStringArray) {
            event.forEach(string => register(target, string, callback))
        }
    }
    function register(target, event, callback) {
        target.forEach((item, index) => {
            item.addEventListener(event, callback)
        })
    }
    return {
        drive: drive
    }
})();

export default Event;

И это мой основной код:

import Event from './event.js';
import Process from './process.js';

class Slider {
    constructor(root, elem, event, process) {
        /* Instance Arguments */
        this.root = document.getElementById(root);
        this.elem = this.root.querySelectorAll(elem);

        /* Local Variables that need to pass to Module Pattern. */
        this.flag = true;
        this.length = this.elem.length;

        /* Global Modules */
        this.Event = event(this.flag, this.length); // doesn't work. 
        this.Process = process;
        this.Setup;
    }
    get Setup() {
        this.Event.drive(this.elem, ['mouseenter', 'click'], (e) => this.Process.finish(e));
    }
}

let slider = new Slider('slider', '.image', Event, Process);

Полный код

Как я уже сказал, я хочу передать локальные переменные моему модулю, чтобы иметь возможность глобально просматривать аргументы внутри области.

Я мог бы просто передать переменные в this.Event.drive(this.flag, this.length) напрямую, какмы обычно это делаем, но это выглядит немного грязно и уродливо, поэтому я не собираюсь использовать этот способ, если нет 0 способов.

Есть ли способы сделать это?

Спасибослушать.

1 Ответ

1 голос
/ 04 ноября 2019

IIFE

, поскольку name говорит о немедленной вызове функции, так что вы можете передать переменную в качестве аргумента, потому что она уже выполнена до того времени.

вы можете передать значение, как показано ниже

var event = (function(name){return name})('value');

...