Function 为什么AS3';s映射回调是否需要另外两个参数?

Function 为什么AS3';s映射回调是否需要另外两个参数?,function,actionscript-3,functional-programming,Function,Actionscript 3,Functional Programming,假设我有: myArray = [1,2,3]; 假设我在其他地方有一个util函数: add3 = function(val) { return val+3; } 现在,如果我想用它作为map函数的回调,我必须这样做: add3Callback = function(currentValue, index, array) { return add3(currentValue); } myArray.map(add3Callback); 尝试myArray.map(add3

假设我有:

myArray = [1,2,3];
假设我在其他地方有一个util函数:

add3 = function(val) {
   return val+3;
}
现在,如果我想用它作为map函数的回调,我必须这样做:

add3Callback = function(currentValue, index, array) {
    return add3(currentValue);
}

myArray.map(add3Callback);
尝试myArray.map(add3)会导致“参数计数不匹配”。最好map回调不需要额外的两个参数,因为现在我必须向所有util函数添加包装器,以便将它们与map一起使用,这与最初使用map的一些原因背道而驰


我错过了什么?为什么这些参数必须有用,其他语言(包括Javascript)似乎没有这样做。

因为这就是它的方式

如果您想解决这个问题,只需编写一个函数即可。究竟为什么要为要传递给Array.map()的每个函数编写一个特定的包装函数


抱怨有必要将函数调用包装到彼此中并声称Javascript是不同的,这真的很奇怪,因为在js中,出于作用域的原因,除了在这种情况下,您总是在附加函数调用中包装东西。

因为AS3比js更严格。具体来说,您不能使用不正确的参数调用函数。例如:

function f(a){}
f(1,2,3); // JS allows this, AS3 does not

也许可以帮助您理解AS3背后的设计选择(顺便说一句,它是基于ES4的,如果它不是被放弃的话,它将成为JS):

我不认为按照您的方式来做是可行的?这里需要一个return语句,此时调用代码就变成了myArray=map(myArray,add3),这根本不起作用。使用函数式方式进行操作的好处在于能够使用现有函数而无需任何额外工作。您的代码也没有使用返回值,将其添加到我的代码中也很简单。毕竟,我的代码只是您的
add3Callback
的推广,说明您不需要单独的包装函数。“其他语言(包括Javascript)似乎不需要这样做”这是一个错误的陈述,因为AS3中的数组映射不是AS3语言的一部分,而只是数组对象的框架实现。map排序方法是一种方便的方法,您可以自由使用它,也可以自由编写自己的排序方法。抱怨这个方法的实现是荒谬和毫无意义的,你抱怨使用的方法不符合你的需要,那么就不要使用它!除了JavaScript之外,还有哪些语言允许您使用不正确的参数调用函数而不抛出错误?
function f(a){}
f(1,2,3); // JS allows this, AS3 does not