Asynchronous RequireJS加载一个.js,但是内联代码仍然是异步的吗?

Asynchronous RequireJS加载一个.js,但是内联代码仍然是异步的吗?,asynchronous,requirejs,Asynchronous,Requirejs,从我看到的使用调试器调用: require(["menu/main-menu"], function(util) { 是否将加载main-menu.js文件,但在执行所需.js文件中的全局代码之前调用该函数?这是正确的吗 如果是这样,在调用函数之前执行所有代码的最佳方法是什么 我试图解决的问题是,我希望mani-menu.js中的代码都在一个模块中。但是,我不能调用该模块中的任何方法,直到其中创建该模块的全局代码被执行 我可以在其中调用一个全局方法,然后创建所有内容,但这需要在每个.js文件中

从我看到的使用调试器调用:

require(["menu/main-menu"], function(util) {
是否将加载main-menu.js文件,但在执行所需.js文件中的全局代码之前调用该函数?这是正确的吗

如果是这样,在调用函数之前执行所有代码的最佳方法是什么

我试图解决的问题是,我希望mani-menu.js中的代码都在一个模块中。但是,我不能调用该模块中的任何方法,直到其中创建该模块的全局代码被执行

我可以在其中调用一个全局方法,然后创建所有内容,但这需要在每个.js文件中使用一个全局init()方法(每个文件都有一个唯一的名称)

处理这一切的最好办法是什么

更新:这里有一个更基本的问题(可能)。在编写javascript时(我使用senchaextjs和TypeScript),我需要创建我的对象。所以当我去创建比如说我的主菜单时,我想调用main-menu.js文件中的一个方法来获取我创建的ExtJS派生菜单对象

我认为main-menu.js中的所有代码都应该在一个名称空间中,包括我调用的获取菜单对象的方法。对吗?此外,大多数Ext JS代码的设置方式是,您有几个Ext.define()调用以及其他变量实例化,然后函数将获取所有这些,构建完整菜单并返回它。但这需要在调用main-menu.js之前在main-menu.js中执行所有代码


我的做法正确吗?到目前为止,我的经验是Java&C,我可能试图将该模型与javascript错误地匹配。

让我们假设
菜单/main menu.js
包含以下内容:

define(function () {
    // Module factory function
    return [... whatever you want to expose...];
});
您的应用程序执行以下操作:

require(["menu/main-menu"], function (util) {
    // Require callback.
});
发生的情况是:

  • require
    调用加载
    menu/main menu.js

  • 执行
    菜单/main menu.js
    中的
    定义

  • 执行模块工厂功能(传递给
    定义
    的功能)

  • 执行require回调时,符号
    util
    设置为
    menu/main menu.js
    中的工厂函数返回了什么

  • 至于模拟名称空间,有多种方法。对于 例如,您可以这样做:

    define(function () {
        return {
            foo: function () {},
            bar: function () {},
            [...]
        };
    });
    
    require(["menu/main-menu"], function (util) {
        util.foo();
        util.bar();
    });
    
    这将导出一个包含两个函数的对象。然后你可以使用它 像这样:

    define(function () {
        return {
            foo: function () {},
            bar: function () {},
            [...]
        };
    });
    
    require(["menu/main-menu"], function (util) {
        util.foo();
        util.bar();
    });
    
    RequireJS还支持定义模块的通用JS风格:

    define(function (require, exports, module) {
        exports.foo = function () {};
        exports.bar = function () {};
        [...]
    });
    
    这在功能上等同于我定义模块的第一种方式 前面:您得到了相同的两个函数,并且在相同的环境中使用它们 就像我上面所说的那样

    不幸的是,我不能具体谈论ExtJS,因为我没有
    使用它。

    我认为是这个定义让它起作用。只需一个require,即可加载.js文件,但可能尚未执行。如果您设计的应用程序旨在使用RequireJS,则必须使用
    define
    。可以让RequireJS处理不使用
    define
    的文件,但只有在使用不适用于RequireJS的第三方库时才可以这样做。