возвращает `Невозможно получить доступ к $ {fn} до инициализации`, но работает - PullRequest
0 голосов
/ 24 апреля 2020

a. js:

export const(let) fn = par => {};
export var fn = function(par) {};
const(let) fn = par => {};
export {fn};

b. js:

import {fn} from './a.js'; // Uncaught ReferenceError: Cannot access '${fn}' before initialization

Ничего из вышеперечисленного не работает, но если я попытаюсь:

export function fn(par) {};

Работает. Могу я узнать почему? Поскольку не все export const терпят неудачу, фактически большинство из них работает.


// a.js
export const debounce = (fn, delay, immediate) => {
    let timer;
    return function () {
        const that = this;
        const args = arguments;

        clearTimeout(timer);

        if (immediate && !timer) fn.apply(that, args);

        timer = setTimeout(() => {
            timer = null;
            fn.apply(that, args);
        }, delay);
    };
};

//b.js
import {debounce} from './a.js';
const fn = debounce(...somePar) // Uncaught ReferenceError: Cannot access 'debounce' before initialization

Эта очень обычная функция debounce является одной из неудачных.


Я думаю, это может быть проблема подъема, но я объявляю ее сверху чуть ниже import


Этот работает:
// a.js
export const toggleArrows = (arrows, method) => {
    const arrow = document.getElementsByClassName(arrows)[0].classList;
    if (method === 'hide') {
        arrow.add('d-none');
    }
    if (method === 'show') {
        arrow.remove('d-none');
    }
};

// b.js
import {toggleArrows} from './a.js';
export const goTop = () => {
    window.scrollTo(0, 0);
    toggleArrows('arrow-top', 'hide');
    toggleArrows('arrow-bot', 'show');
};

// c.js
import {goTop} from './b.js';
window.addEventListener('beforeunload', goTop);
...