Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Прототипы и наследования
var a = [3,4,5];
a[0] === a.0жесткими операторами сравнения
Имейте в виду, что функциональная декларация функций будет доступна и в области видимости выше, так что все это не имеет значения, в каком порядке была объявлена эта функция. Как правило, вы всегда должны объявлять функции в глобальной области видимости, при этом вы должны стараться избегать размещения таких функций внутри условных операторов.
function ruleOfThree (had, got, have) {
return have * got / had;
}
ruleOfThree(4, 2, 6);
// <- 3хорошо: [… не дублировать комментариями то, что понятно из кода...]
var numeric = /\d+/; // поиск одной или более цифр в строке
[].slice.call(arguments)
var args; for(let i = arguments.length, a = args = new Array(i); i--; a[i] = arguments[i]);
var args = Array.prototype.concat.apply(Array.prototype, arguments);
someEmitter.on('event', function onSomeEmitterEvent() {
//some code
});
var args = Array.prototype.concat.apply(Array.prototype, arguments);
function f(arg) {
arg = arg || DEFAULT; //Присвоили аргументу новое значение
}
Разве здесь [].slice.call(arguments) есть утечка аргументов? slice же тоже ничего не меняет в arguments.
function bad2() { return [].call.slice(arguments, 1); }
Если же вы пытаетесь передать arguments в какую-нибудь другую функцию (например, делаете [].slice.call(arguments, 1)), то Crankshaft вообще откажется оптимизировать вашу функцию.
2й аргумент нативного Function.prototype.apply исключение, так как вызываемая функция на наш arguments гарантировано воздействовать не сможет
Array.from(arguments)
использовать. Или даже ...argsfunction(...args) {var a = args; return a;} // не оптимизируется
function() {var a = Array.from(arguments); return a;} // не оптимизируется
function() {var a = []; for(let el of arguments) a.push(el); return a;} // оптимизируется TurboFan
function() {var a = []; for(var i = 0, l = arguments.length; i < l; i++) a.push(arguments[i]); return a;} // оптимизируется
function() {var a = Array.prototype.concat.apply(Array.prototype, arguments); return a;} // оптимизируется
function testFunction(...args) {
const l = args.length;
var a = new Array(l);
for(let i = 0; i < l; i++) a[i] = args[i];
return a;
}
var testFunction = (...args) => {
let a = Array.from(args);
args = 4;
return a;
}
Function is optimized by TurboFanFunction is optimizedfunction test(...rest) {
[].slice.call(rest)
}
function test() {
for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {
rest[_key] = arguments[_key];
}
[].slice.call(rest);
}
[...arguments]
[].concat(Array.prototype.slice.call(arguments))
$ ./node_modules/.bin/babel -V
6.6.5 (babel-core 6.7.4)
$ cat ./src/index.js
function test(...rest) {
[].slice.call(rest)
}
$ cat ./lib/index.js
"use strict";
function test() {
for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {
rest[_key] = arguments[_key];
}
[].slice.call(rest);
}
var arr = [1, 2];
console.log([3, 4, 5, ...arr]); // [3, 4, 5, 1, 2]
function test(...args) {
var newArgs = [...args]
}
function test() {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var newArgs = [].concat(args);
}
if (!Array.prototype.reduce) {
Array.prototype.reduce = function(callback/*, initialValue*/) {
'use strict';
if (this == null) {
throw new TypeError('Array.prototype.reduce called on null or undefined');
}
if (typeof callback !== 'function') {
throw new TypeError(callback + ' is not a function');
}
var t = Object(this), len = t.length >>> 0, k = 0, value;
if (arguments.length == 2) {
value = arguments[1];
} else {
while (k < len && ! k in t) {
k++;
}
if (k >= len) {
throw new TypeError('Reduce of empty array with no initial value');
}
value = t[k++];
}
for (; k < len; k++) {
if (k in t) {
value = callback(value, t[k], k, t);
}
}
return value;
};
}
while (k < len && ! k in t) {
k++;
}
if (k >= len) {
throw new TypeError('Reduce of empty array with no initial value');
}
value = t[k++];
if (len == 0) {
throw new TypeError('Reduce of empty array with no initial value');
}
value = t[k++];
while (k < len && ! k in t) {
k++;
}
ES5 руководство по JavaScript