Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
function sk(x, y) { // x and y are not context allocated
"use strict";
return arguments[0] * arguments[1];
}omega ~ ∳ file /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
/Applications/Google Chrome.app/Contents/MacOS/Google Chrome: Mach-O executable i386
"use strict" разрывает связь между arguments и формальными параметрами. Это убирает создание контекста и позволяет инлайнить этот код (если функция создает контекст, то такую пока V8 не инлайнит).
var vector = {
add: function (a,b){
return [a[0]+b[0],a[1]+b[1]]
}
}
//и где-то в совершенно другом месте vector.add не инлайнится
При этом, если бы я использовал просто функцию vector_add в глобальном scope - инлайн был бы возможен.
var a = [1, 2, 3, 4];
// Если выполнять это честно, то функция будет вызвана на каждом элементе - это дорого
// Но такая запись более читаема
a.forEach(function (item) {
console.log(item);
});
// Такие экспрешены инлайнится (где это возможно) в стейтмент for () {}
for (var i = 0; i < a.length; i++) {
console.log(a[i]);
}
for если зарядить на длинном массиве, много-много раз пустую функцию то будет видна цена вызова.delete не прописывает undefined, он удаляет свойство полностью оставляя вместо него дырку. разницу просто увидеть на примере кода:a = [1];
b = [1];
Array.prototype[0] = 42;
console.log(a[0] + " " + b[0]); // 1 1
delete a[0];
b[0] = undefined;
console.log(a[0] + " " + b[0]); // 42 undefined
splice же, который удаляет и сдвигает элементы не оставляет после себя дырок, поэтому безобиден в данном отношении. Следует, впрочем, всегда помнить, что он имеет линейную сложность по количеству сдвигаемых элементов.А что нужно делать вместо удаления элементов из массивов?Удалять-то можно; а нужно не оставлять дырки.
splice, например, линейная операция по количеству сдвигаемых элементов. в каких-то случаях может лучше arr[i] = null; делать (хоть оно и не эквивалентно delete)splice. Однако он медленнее, чем просто устанавливать значение равным null, либо делать delete. Но ведь это тоже не всегда приемлимо. Было бы хорошо услышать реальные примеры задач и те цифры, которые мы выигрываем/проигрываем, используя один или другой метод.
jQuery('...') === try { jQuery('..') } catech(e) {};
Оптимизируем производительность JavaScript для V8