我只是在挖掘一些JavaScript代码(Raphaël.js)并遇到以下行(稍微翻译):
Math.min.apply(0, x)
Run Code Online (Sandbox Code Playgroud)
在哪里x是一个数组.为什么你会这样做?行为似乎是"从数组中取出最小值x".
Tre*_*ham 33
当我发布自己的问题时,我意识到了答案:这是x在JavaScript 中使用数组min的最简洁方法.第一个论点是完全随意的; 我发现0令人困惑,因为代码直观地意味着"取0和x的最小值",这绝对不是这种情况.使用Math对象对于人类可读性更有意义,但Raphael.js作者痴迷于缩小,0缩短了三个字节.
见http://ejohn.org/blog/fast-javascript-maxmin/
为了便于阅读,我强烈要求人们停止这样做,而是定义一个函数
function arrayMin(arr) { return Math.min.apply(Math, arr); };
Run Code Online (Sandbox Code Playgroud)
原因是这样的:
您的输入x是一个数组
的签名Math.min()不使用数组,仅使用逗号分隔的参数
如果您使用的Function.prototype.call()话,它将具有几乎相同的签名,除了第一个参数是this上下文,即谁在“调用”
Math.min.call(context, num1, num2, num3)在context只有当你指的事项this里面的函数,例如,你可以在阵列上调用大多数方法:Array.prototype.<method>将引用this(数组左边的“点”)的方法内。
Function.prototype.apply()与十分相似.call(),只是它不再使用逗号分隔的参数,而是在后面添加一个数组context。
Function.prototype.call(context, arg1, arg2, arg3)Function.prototype.apply(context, [arg1, arg2, arg3]) 的0或null你把在作为第一个参数只是一个地方移。
| 归档时间: |
|
| 查看次数: |
24408 次 |
| 最近记录: |