在Dojo中,为什么需要()一个已经定义()的模块呢?

lndjwyie  于 2022-12-08  发布在  Dojo
关注(0)|答案(2)|浏览(126)

我正在看另一个人写的一个JavaScript片段,

define(
    [
        "dojo/a",
        "dojo/b",
        "dojo/c",
        ...,
        "dojo/z"
    ],
    function(a, b) {
        var c = require("dojo/c");
        ...;
        var z = require("dojo/z");

        // code goes here
    }
);

我想弄明白你为什么要这么做。这段短得多的片段不是完全一样吗?:

define(
    [
        "dojo/a",
        "dojo/b",
        "dojo/c",
        ...,
        "dojo/z"
    ],
    function(a, b, c, ..., z) {
        // code goes here
    }
);
dm7nw8vv

dm7nw8vv1#

导入模块一次后,无需再次添加require:

<script>require(['dojox/rpc/JsonRPC','dojo/store/Memory','dijit/form/FilteringSelect'],
        function(FilteringSelect,JsonRPC,Memory){

        ##your code goes here..

        });
</script>
nzk0hqpo

nzk0hqpo2#

第一个代码段中的代码段并不相同,加载程序首先将数组中传递的所有模块加载到require,然后仅在数组中列出的所有模块都已加载时执行回调。在回调中,您可以在其他require之前运行其他代码。
示例:

define(
    [
        "dojo/a",
        "dojo/b",
        "dojo/c",
        ...,
        "dojo/z"
    ],
    function(a, b) {
        // execute some code here
        var c = require("dojo/c");
        var z = require("dojo/z");
        // code execute here even if c and z are not loaded yet
    }
);

您的第二个代码段回调只在加载了所有模块时执行。
一般来说,我会选择第二种方法,即使第一种方法在您需要根据某些条件加载一些模块时很方便。

相关问题