Функции в 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

Стрелочные функции Fat arrow functions

Стрелочные функции не содержат слова 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 - указывает на объект к которому привязана функция.

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 ссылается на контекст функции. 

 

 

 

length у функций

  1. В виде функции;

  2. В виде метода;

  3. В виде конструктора;

  4. С помощью методов 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 

Вызов функции в с помощью метода call() и apply()

functions in javaScript

By Vadim Nahornyi

functions in javaScript

  • 427