据我所知,很多 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/