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);