Вот как это описано в спецификации языка ECMAScript
. Вот соответствующая часть Array.prototype.map
, как описано в §15.4.4.19 )
k < len
a) Пусть Pk
будет ToString(k)
. b) Пусть kPresent
является результатом вызова внутреннего метода [[HasProperty]] O
с аргументом Pk
. c) Если kPresent
- true
, то выполняет магию Поскольку в вашем массиве нет инициализированного члена, вызывающий, например, new Array (1337).hasOwnProperty (42)
, оценивается как false
, поэтому условие на шаге 8.c не выполняется.
Однако вы можете использовать небольшой «взлом» для сделайте то, что хотите.
Array.apply(null, { length: 5 }).map(Number.call, Number) //[0, 1, 2, 3, 4]
Как это работает, вы объяснялись @Zirak
Посмотрите на следующий код, он показывает, как вызывать функции так, как вы хотели бы их вызвать.
#include <stdio.h>
/* Declaration of foo1 . It receives a specific function pointer foo2 and an integer. */
int foo1 (int (*foo2)(int), int a);
int cube(int number)
{
return (number * number * number);
}
int square(int number)
{
return (number * number);
}
int foo1 (int (*foo2)(int), int a)
{
int ret;
/* Call the foo2 function here. */
ret = foo2(a);
printf("Result is: %d\r\n", ret);
return (ret);
}
int main()
{
int a = 3;
foo1(square, a);
foo1(cube, a);
return 0;
}