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



据我所知,很多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 传递为替换函数(因为我没有替换函数,它是可选的)。当然,添加类似您发布的代码来检查第 2 和第 3 个参数的类型以将其简化为:

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
}

所以它并没有那么多实质内容,只是句法糖

最新更新