Нет, порядок свойств объектов не гарантируется в JavaScript; вам нужно использовать Array
.
Определение объекта из ECMAScript Third Edition (pdf) :
4.3.3 Объект
Объект является членом типа Object. Это неупорядоченный набор свойств, каждый из которых содержит примитивное значение, объект или функцию. Функция, хранящаяся в свойстве объекта, называется методом.
Поскольку ECMAScript 2015, использование объекта
Map
может быть альтернативой. AMap
разделяет некоторые сходства сObject
и гарантирует порядок ключей :Карта выполняет итерацию своих элементов в порядке размещения, тогда как порядок итерации не указан для объектов.
В вашем фрагменте кода p более или менее является функцией обратного вызова. Обратный вызов - это функция, которая должна выполняться после завершения выполнения другой функции.
В вашем случае вы создаете другую функцию, в которой используется ваш p.
Вы можете увидеть это, просто войдя в свой p var. p - это функция (обратный вызов) в вашем коде, поэтому вы должны увидеть, что функция выводится.
repeat = (n, action) => {
console.log("Action: ", action);
for(i=1; i<=n; ++i) {
action(i);
}
}
let test_array = [];
repeat(5, p => {
test_array.push(p);
})
Ваш код такой же, как:
repeat = (n, action) => {
for(i=1; i<=n; ++i) {
console.log(action);
action(i);
}
}
let test_array = [];
repeat(5, function(i) {
test_array.push(i);
})
console.log(test_array);
См .: https://developer.mozilla.org/en-US/docs/Glossary/Callback_function
p
используется в качестве параметра для анонимной функции, которую вы предоставляете repeat()
. (Ознакомьтесь с обзором MDN функций в JavaScript )
Вы можете так же легко назначить неанонимную (т. Е. Именованную) функцию для вызова repeat
, как функции являются первоклассными в JavaScript
function foo(i) {
test_array.push(i);
}
repeat(5, foo); // => test_array now holds [1, 2, 3, 4, 5] just like before