javascript - 为什么 AMD 以与 javascript 性质相反的顺序定义其可选参数?

标签 javascript coding-style amd

据我所知,很多 javascript 代码仍然使用 IIFE 作为其命名空间的模式,并且我相信 javascript 开发人员已经习惯了后面通常会有一些东西,不要指望你会看到所有内容您从头开始阅读代码;有时是空括号,有时是更多参数。

我阅读了 require.js 的一部分,并在其 define 实现中看到了附加参数调整:

define=function (name, deps, callback) {
    var node, context;

    //Allow for anonymous modules
    if (typeof name!=='string') {
        //Adjust args appropriately
        callback=deps;
        deps=name;
        name=null;
    }

    //This module may not have dependencies
    if (!isArray(deps)) {
        callback=deps;
        deps=null;
    }

    // .. 

我想更好地理解为什么以这种方式定义它,当我要定义自己的 API 时我应该遵循这种方式吗?

规范:AMD

最佳答案

以随机或非常可选的顺序接受参数的函数只是给你一些语法糖。这不一定是您应该追求的目标,但如果能成功那就太好了。

我可以举一个例子,其中的参数很好:

JSON.stringify(data_obj, undefined, "\t");

你必须传递 undefined 作为替换函数(因为我没有替换函数,它是可选的)。当然,添加类似您发布的代码的代码是很简单的,该代码检查第二个和第三个参数的类型以将其减少为:

JSON.stringify(data_obj, "\t");

在 Java(不是 JavaScript)中,您具有多态函数,例如:

public function get(String string, List list) {}

public function get(List list) {}

根据您调用 get 的方式,它将调用其中一个实现。当您实现这些时,您可能会看到类似以下内容:

public function get(String string, List list) {
     /* actual implementation */
}

public function get(List list) {
    this->get("", list); // call get with default 1st argument
}

所以实际上并没有那么多实质内容,只是语法糖

关于javascript - 为什么 AMD 以与 javascript 性质相反的顺序定义其可选参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20020761/

相关文章:

javascript - 如何使用 { } 执行箭头函数表达式

javascript - 如何检查日期是否过去?以及如何获取两个日期之间的差异?按输入标签类型日期和类型时间

javascript - 使用 react-native-fs 库在 React-Native 中保存文件

javascript - 输入日期不得大于 Bootstrap 日期选择器 [dd-M-yyyy] 格式中的当前日期

Python 尝试 block 大小

c++ - 查找未使用的包含标题的工具?

python - 使静态方法显式引用该类

sapui5 - "Modules that use an anonymous define() call must be loaded with a require() call"

performance - 自 v2.1.16 以来,r.js 依赖项跟踪是否显着变慢?或者只是我?

javascript - RequireJS:如何在模块级别声明依赖关系?