Этот код работает:
@push('scripts')
<script>
function esFeatureDetect() {
console.info('Feature detection function has been called!');
}
</script>
@endpush
@push('scripts')
<script>
esFeatureDetect();
</script>
@endpush
Проблема в том, что если я возьму функцию и положу в другой файл (с помощью вебпака), вдруг функция не найдется.
Вот как выглядит код во внешнем файле:
function esFeatureDetect() {
console.info('Feature detection function has been called!');
}
Webpack отлично его упаковывает. (Я использую Webpack и для многих других файлов).
Вот новые директивы блейда:
@push('scripts')
<script src = "/dist/js/full-feature-detect.js"></script>
@endpush
@push('scripts')
<script>
esFeatureDetect();
</script>
@endpush
Но я получаю сообщение об ошибке:
esFeatureDetect is not defined
Почему это так?
Файл подтягивается в файл браузера, я вижу код в консоли. Я также попробовал следующий вызов:
window.onload = esFeatureDetect;
а также
window.onload = esFeatureDetect();
но ни то, ни другое не помогло.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы пытались использовать функцию assets ()?
<script src = "{{asset('/dist/js/full-feature-detect.js')}}"></script>
Если вы хотите иметь возможность использовать свою функцию в глобальном масштабе, вам нужно прикрепить ее к объекту window.
window.esFeatureDetect = function () {
console.info('Feature detection function has been called!');
};
@KimPrince Это просто ограничено. scotch.io/tutorials/understanding-scope-in-javascript. Моя формулировка может быть немного неточной, но, по сути, webpack создаст пакет из вашего кода, который будет состоять из одного или нескольких модулей. Когда вы определяете функцию таким образом, она сможет работать только в рамках этого модуля, например. function a() { function b() {}} вы сможете звонить b(); только изнутри a();
Спасибо, Росс, это имеет смысл.
Спасибо, Росс, это прибило это. Но почему? Почему мне нужно назначать его окну только потому, что оно исходит из другого файла?