Жигалов Сергей
function min(a, b) {
return a < b ? a : b;
}
min(2, 7); // 2
min(3, 4, 2); // 3
min(13); // undefined
function min(a, b) {
return a > b ? b : a;
}
min(2, 7); // 2
min(13); // 13
function min(a, b) {
if (b === undefined) {
return a;
}
return a < b ? a : b;
}
min(2, 7); // 2
min(13); // 13
function min(a, b) {
b = b || Infinity;
return a < b ? a : b;
}
min(2, 7); // 2
min(13); // 13
function getCartSum(price, count) {
count = count || 1;
return price * count;
}
getCartSum(27.70, 10); // 🍏 277₽
getCartSum(49.90); // 🍅 49.9₽
getCartSum(99999, 0); // 🚀 99999₽ ???
function getCartSum(price, count) {
if (count === undefined) {
count = 1;
}
return price * count;
}
getCartSum(27.70, 10); // 🍏 277₽
getCartSum(49.90); // 🍅 49.9₽
getCartSum(99999, 0); // 🚀 0₽
function BMI(params) {
var height = params.height;
return params.weight / (height * height);
}
BMI({ weight: 60, height: 1.7 }) // 20.7
Объект arguments - это подобный массиву объект, который содержит аргументы, переданные в функцию.Arguments object. MDN
function example() {
arguments[1]; // 12
arguments.length; // 2
}
example(3, 12);
function sum() {
var a = arguments[0] || 0;
var b = arguments[1] || 0;
return a + b;
}
sum(3, 12); // 15
sum(45); // 45
sum(2, 4, 8); // 6
function sum() {
var sum = 0;
for(var i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
sum(2, 4, 8); // 14
function sum() {
var args = [].slice.call(arguments);
return args.reduce(function (sum, item) {
return sum + item;
});
}
sum(2, 4, 8); // 14
function example() {
[1, 2].slice(); // [1, 2]
[].slice.call([3, 4]); // [3, 4]
[].slice.call(arguments); // [5, 6]
}
example(5, 6);
// function declaration
function add(a, b) {
return a + b;
}
// function expression
var add = function (a, b) {
return a + b;
}
add(2, 3); // 5
function add(a, b) {
return a + b;
}
add(2, 3); // TypeError
var add = function (a, b) {
return a + b;
}
var factorial = function inner(n) {
return n === 1 ?
1 : n * inner(n - 1);
}
typeof factorial; // 'function'
typeof inner; // ReferenceError
factorial(3); // 6
var add = new Function('a', 'b', 'return a + b');
add(2, 3); // 5
var text = 'Привет';
function greet() {
}
┌{ text, greet }
│
│
│
global.text; // 'Привет'
function greet() {
var text = 'Привет';
text; // 'Привет'
}
text; // ReferenceError:
// text is not defined
┌{ greet }
├─┬{ text }
│ │
│ │
│
│
│
function greet() {
if (true) {
var text = 'Привет';
}
text; // 'Привет'
}
┌{ greet }
├─┬{ text }
│ │
│ │
│ │
│ │
│ │
│
function greet() {
var text = 'Привет';
function nested() {
text; // 'Привет'
}
}
┌{ greet }
├─┬{ text, nested }
│ │
│ │
│ ├─┬{ }
│ │ │
│ │
│
function greet() {
var text = 'Привет';
function nested() {
var text = 'Пока';
text; // 'Пока'
}
text; // 'Привет'
}
┌{ greet }
├─┬{ text: Привет, nested }
│ │
│ │
│ ├─┬{ text: Пока }
│ │ │
│ │ │
│ │
│ │
│ │
│
function declaration
var
add(2, 3);
function add(a, b) {
return a + b;
}
{ add: function }
add(2, 3); // 5
function add(a, b) {
return a + b;
}
{ add: function }
add(2, 3);
var add = function (a, b) {
return a + b;
}
{ add: undefined }
add(2, 3); // TypeError
var add = function (a, b) {
return a + b;
}
{ add: undefined }
add(2, 3); // TypeError
var add = function (a, b) {
return a + b;
}
{ add: undefined }
add(2, 3); // TypeError
var add = function (a, b) {
return a + b;
}
{ add: function }
if (true) {
var milk = 270;
}
var beans = 30;
{ milk: undefined, beans: undefined }
if (true) {
var milk = 270;
}
var beans = 30;
{ milk: undefined, beans: undefined }
if (true) {
var milk = 270;
}
var beans = 30;
{ milk: 270, beans: undefined }
if (true) {
var milk = 270;
}
var beans = 30;
{ milk: 270, beans: undefined }
if (true) {
var milk = 270;
}
var beans = 30;
{ milk: 270, beans: undefined }
if (true) {
var milk = 270;
}
var beans = 30;
{ milk: 270, beans: 30 }
Замыкание – это функция вместе со всеми внешними переменными, которые ей доступны.
function greet() {
var text = 'Привет';
}
greet();
{ text: 1 }
function greet() {
var text = 'Привет';
}
greet();
{ text: 0 }
function makeCounter() {
var currentCount = 0;
return function () {
return currentCount++;
};
}
var counter = makeCounter();
{ currentCount: 1 }
function makeCounter() {
var currentCount = 0;
return function () {
return currentCount++;
};
}
var counter = makeCounter();
{ currentCount: 1 }
function makeCounter() {
var currentCount = 0;
return function () {
return currentCount++;
};
}
┌{ makeCounter } // 1
├─┬{ currentCount } // 2
│ │
│ │
│ ├─┬{ } // 3
│ │ │
│ │
│
var counter = makeCounter();
counter(); // 0
counter(); // 1
counter(); // 2
var yetAnother = makeCounter();
yetAnother(); // 0
function greet(name) {
return function () {
return 'Привет, ' + name;
}
}
var helloWorld = greet('мир!');
helloWorld(); // "Привет, мир!"
function format(date) {
return date.toGMTString()
}
function getDateString(date) {
date = date || new Date();
return format(date);
}
getDateString();
// "Thu, 27 Oct 2016 10:56:52 GMT"
function format() {
return '💥';
}
getDateString();
// "💥"
immediately-invoked function expression
var getDateString = (function () {
function format(date) {
return date.toGMTString()
}
return function(date) {
date = date || new Date();
return format(date);
}
}());
(function () {
}());
(function () {
})();
!function () {
}(); // ❌
void function () {
}(); // ❌