Использование:
int a=[10] = {1, 2, 3, 4, 5};
int n = sizeof(a);
printf("%d", n);
Выход:
5
Причина: вычисляет количество элементов, хранящихся в массиве, а не количество свободных пространств, выделенных ему.
Хром, FF и узел кажутся неправильными здесь, Бабель прав:
Функции стрелок не имеют собственного arguments
привязки в своей области; no arguments object создается при их вызове.
ищет официальные документы здесь
Выражения функции функции для функций, которые имеют свои [[ThisMode ]] установите на
lexical
, а когда они называются манифестацией объявления , не создается объектarguments
. Существует даже примечание (18а), в котором указано, что «функции Arrow никогда не имеют объектов аргументов. ».
Как отмечал Берги, функции стрелок не имеют своей собственной переменной arguments
.
Однако, если вы хотите захватить args для своей функции стрелки, вы можете просто использовать параметр останова
const myFunc = (...args) =>
console.log ("arguments", args)
myFunc (1, 2, 3)
// arguments [1, 2, 3]
Параметры останова могут быть объединены с другими позиционными параметрами, но всегда должны быть включены как last
const myFunc = (a, b, c, ...rest) =>
console.log (a, b, c, rest)
myFunc (1, 2, 3, 4, 5, 6, 7)
// 1 2 3 [ 4, 5, 6, 7 ]
Если вы допустили ошибку записи параметра отдыха в любой другой позиции, вы получите сообщение об ошибке
const myFunc = (...rest, a, b, c) =>
console.log (a, b, c, rest)
myFunc (1, 2, 3, 4, 5, 6, 7)
// Error: Rest parameter must be last formal parameter
/me shrugs
- Наверное, в большинстве случаев меня не волнует выданный вывод. Там добавлен еще один код, но это не так, как будто он не работает. Если вы заботитесь о вытеснённом выходе, вы, вероятно, не должны использовать транспилятор в первую очередь. Я имею в виду, просто посмотрите на переданный вывод для генератора или назначения деструкции ...
– user633183
22 June 2015 в 08:21
Yeah but... who cares ?
- Я, по крайней мере, за то, над чем сейчас работаю. В общем, я согласен, но ненужный for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; }
слишком тяжел для моего текущего проекта, когда я делаю такие вещи, как написание помощников языковых функций (map = (...args) => flip(args)
). Наличие этого дополнительного кода 20 раз слишком много. Это не проблема его расширения в больший источник, чем оригинал, это проблема его расширения в значительно i> больше источника, чем я мог бы написать (ваш второй ex хороший)
– Mark Kahn
22 June 2015 в 10:33
arguments
– Dmitry Masley 19 April 2018 в 08:57