Вызвать javascript-метод в другом .js файле

Каково правило о вызовах функций от одного js к другому? Я думал, что это сработало, но я не запутался (понял через firefox), что функция в другом js файле, похоже, не распознается в моем первом файле js.

Есть ли какое-то правило вокруг порядка или какой-то трюк, который вам нужно сделать, чтобы заставить это работать?

Ответ 1

Вы вызываете функцию в обработчике события или сразу же, когда загружается файл javascript? Если это не в обработчике событий, то порядок загрузки важен. Если у вас есть циклические зависимости, вам может потребоваться отложить некоторые из инициализации с помощью "DOM ready" или window.onLoad.

Ответ 2

Он должен быть доступен в глобальном масштабе. Например:

// file1.js
function hello() {
    alert("Hello, world!");
}
// file2.js
$(function() {
    hello();
});

Вероятно, у вас есть что-то вроде этого:

// file1.js
$(function() {
    function hello() {
        alert("Hello, world!");
    }
    // ...
});
// file2.js
$(function() {
    hello();
});

hello находится только в области ограничения, определенного в file1.js. Поэтому для доступа к нему в file2.js вам придется экспортировать его где-нибудь, где file2.js может получить на нем:

// file1.js
$(function() {
    function hello() {
        alert("Hello, world!");
    }
    window.hello=hello;
});
// file2.js
$(function() {
    hello();
});

Кроме того, script, где функция определена, должна быть загружена, проанализирована и выполнена до того, как функция может быть вызвана из другого script.

Ответ 3

Браузер анализирует файлы javascript в том порядке, в котором они отображаются в HTML. Поэтому, если функция, которая исключена в первом файле, полагается на функцию, находящуюся во втором файле, она не будет работать. Если вы используете $(function() {}); например, с jQuery, это инструктирует javascript ждать, пока событие onload не будет запущено из объекта window. Это гарантирует, что все элементы на странице были загружены до выполнения.