Функции

Стандартные функции

isFinite()

Возвращает true только тогда, когда n — обычное число, а не одно из NaN , Infinity и ‐Infinit

isFinite(1);
// true

isFinite(Infinity);
// false

isFinite(NaN);
// false

Function

class Function(args, function_body)

Функция/конструктор функции, которая возвращает функцию

Наследник Object

var func = Function("x", "y", "return x + y;")
var result = func(20, 10)
// 30
__proto__

Ссылка экземпляра на прототип

arguments

Массив аргументов, переданных функции

caller

Ссылка на функцию, вызвавшую данную функцию

length

Число именованных аргументов, указанных при объявлении функции

name

Название функции

prototype

Ссылка функции на прототип

apply(thisArg, arguments)

Вызывает функцию с подменой контекста

functionName.apply(thisArg, param1, param2)
bind(obj[, arguments])

Возвращает новую функцию, которая вызывает данную, как метод указанного объекта с указанными аргументами.

Таким образом можно подменить контекст

function f(){...};
var g = f.bind(o, 1, 2);
// эквивалентно f.call(o, 1, 2, 3);
call(obj, argument1, ...)

Вызывает функцию как метод указанного объекта

Самописные функции

Два метода создания функции

function name(){}
// эта функция будет создана в самом начале при чтении скрипта

var name = function(){}
// эта функция будет создана тогда, когда интерпретаор до него дойдет

arguments

var average = function(x, y){
    // массив всех принятых аргументов
    console.log(arguments);

    return (x+y)/2;
}

Анонимная функция

(function(){
    var property = 1;
})();

Замыкани

var getAnswer = (function(){
    var answer = 42;

    return function inner(){
        // эта переменная замыкается
        return answer;
    };
}());

getAnswer();
// 42

Области видимости

var a = 10;
(function() {
    console.log(a);
})()
// 10

(function() {
    console.log(a);
    var a = 1;
})()
// undefined

Значения по умолчанию функции

function some(x, y, z){
    x = x || 1;
    y = y || 2;
    z = z || 3;
    ...
}

Note

EcmaScript6

function some(x=1, y=2, z=3){
    ...
}

Распаковка аргументов

function some(a, b){
    return a + b;
}
var data = [1, 4];
some.apply(null, [data]);
// 5

Note

EcmaScript6

function some(a, b){
    return a + b;
}
var data = [1, 4];
some(...data);
// 5

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

Note

EcmaScript6

let circleArea = (pi, r) => {
    let area = pi * r * r;
    return area;
}
let circleArea2 = (pi, r) => pi * r * r;
let square = x => x * x;
let log = () => console.log("Some text");
let getPerson = () => ({ name: "ilnurgi" });
(() => console.log("IIFE"))();

circleArea(3.14, 3);
// 28.26

Функция генератор

Note

EcmaScript6

Функция возвращает несколько значений по одному.

function* generator_function(){

    yield 1;
    yield 2;
}
var generator = generator_function()
generator.next().value
// 1
generator.next().value
// 2
// генератор с передачей параметра в yield
function* generator_function(){
    var a = yield 12;
    var b = yield a + 1;
}
var generator = generator_function()
generator.next().value
// 12
generator.next(5).value
// 6
// досрочное завершение генератора
function* generator_function(){
    var a = yield 12;
    var b = yield a + 1;
}
var generator = generator_function()
generator.next().value
// 12
generator.return(5).value
// 5
// вызов исключении в генераторе
function* generator_function(){
    try {
        yield 1;
    } catch(e) {
        console.log("1st exception");
    }
    try {
        yield 2;
    } catch(e) {
        console.log("2st exception");
    }
}
var generator = generator_function()
generator.next().value
generator.throw("exception string").value