Функции в JavaScipt
function sum(a,b){
return a+b;
}
let sun = function(a,b){
return a+b;
}
let getName = (name) => name;
Стрелочные функции (Fat arrow function)
console.log(sum(10,10));
// -> 20
function sum(a,b){
return a+b;
}
Такой код работает, хотя функция объявляется ниже того кода, который её использует. Это происходит оттого, что объявления функций не являются частью обычного исполнения программ сверху вниз. Они «перемещаются» наверх их области видимости и могут быть вызваны в любом коде в этой области.
1 console.log(sum(10,10));
2 /* -> Uncaught TypeError:
3 /*sum is not a function at main.js:1 */
4
5 var sum = function(a,b){
6 return a+b;
7 }
8
9 console.log(sum(10,10));
10 // -> 20
Sum это перменная которая хранит значение возвращаемое значение анонимной функции. Конструкция на строке 1 не знает о существовании переменной sum и поэтому на консоль выводится ошибка.
let sun = (a, b) => a + b;
console.log(sun(10, 10));
// -> 20
let printName = (name) => console.log(name);
printName("Vadim");
// -> Vadim
Стрелочные функции не содержат слова function и не имеют собственно значения this, а наследуют его от ближайшего лексического окружения.
1 function persone(name,lastName){
2 console.log(arguments[0]);
3 console.log(arguments[1]);
4 console.log(this);
5 }
6
7 persone("Vadim","Nahornyi");
8 Vadim
9 Nahornyi
10 Window {}
При вызове функции ей неявно передается два параметра: arguments и this.
arguments - коллекция всех передаваемых параметров функции.
this - указывает на объект к которому привязана функция.
1 function addMethod(object,
2 methodName, func){
3 }
4
5 console.log(addMethod.length);
6 // -> 3
length - при вызове у функции возвращает к-во переданных аргументов.
length у функций
1 function addMethod(object,
2 methodName, func){
3 }
4
5 console.log(addMethod.length);
6 // -> 3
контекст функции - объект к которому привязана функция. Ключевое слово this ссылается на контекст функции.
В виде функции;
В виде метода;
В виде конструктора;
С помощью методов call() и apply()
function persone(name,lastName){
console.log("Name: "+name);
console.log("Last name: "+lastName);
console.log(this);
}
persone("Vadim","Nahornyi");
console.log("____________________________________");
var persone = function(name,lastName){
console.log("Name: "+name);
console.log("Last name: "+lastName);
console.log(this);
}
persone("Vadim","Nahornyi");
// Name: Vadim
// Last name: Nahornyi
// Window {}
// ____________________________________
// Name: Vadim
// Last name: Nahornyi
// Window {}
var Persone = {
printName:function (name) {
console.log(name);
console.log(this);
},
printLastName:function (lastName) {
console.log(lastName);
console.log(this);
}
}
Persone.printName("Vadim");
Persone.printName("Nahornyi");
// Vadim
// Persone{}
// Nahorny
// Persone{}
function Persone(name,lastName) {
console.log("Name: "+name);
console.log("Last name: "+lastName);
console.log(this);
}
var student = new Persone("Vadim","Nahornyi");
// Name: Vadim
// Last name: Nahornyi
// Persone {}
function sum(){
var result = 0;
for (var i=0; i<arguments.length; i++){
result += arguments[i];
}
this.result = result;
}
var MathOpeartionSum = {};
var MathOpeartionSum1 = {};
sum.apply(MathOpeartionSum,[1,2,3,4]);
console.log(MathOpeartionSum.result);
// -> 10
console.log("___________________________________");
console.log("");
sum.call(MathOpeartionSum1,10,20,30,40);
console.log(MathOpeartionSum1.result);
// -> 100