// эта функция будет создана в самом начале при чтении скрипта
function name(){}
// эта функция будет создана тогда, когда интерпретаор до него дойдет
var name = function(){}
// arguments - массив всех принятых аргументов
var average = function(x, y){
log(arguments);
}
// параметры по умолчанию
function some(x, y, z){
x = x || 1;
y = y || 2;
z = z || 3;
}
// параметры по умолчанию в новой спецификации
function some(x=1, y=2, z=3){};
// передача параметров с распаковкой
function some(a, b){}
some(...[1, 4]);
function some(a, b ...c){};
// анонимная функция
(function(){})();
// стрелочная функция
// this, внутри стрелочной функции, не является ссылкой на функцию
let circleArea = (pi, r) => {};
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"))();
// асинхронная функция
function func1(x){
return new Promise(
resolve => {
setTimeout(
() => {
resolve(x);
}, 2000
)
}
);
}
async function add1(x) {
const a = await func1(20);
const b = await func1(30);
return x + a + b;
}
add1(10).then(
v=> {
console.log(v);
}
)
// замыкание
var getAnswer = (function(){
var answer = 42;
return function inner(){
// эта переменная замыкается
return answer;
};
}());
getAnswer();
// 42
Function
(args, function_body)Функция/конструктор функции, которая возвращает функцию
Наследник Object()
var func = Function("x", "y", "return x + y;")
var result = func(20, 10)
// 30
Function.
__proto__
Ссылка экземпляра на прототип
Function.
arguments
Массив аргументов, переданных функции
Function.
caller
Ссылка на функцию, вызвавшую данную функцию
Function.
length
Число именованных аргументов, указанных при объявлении функции
Function.
name
Название функции
Function.
prototype
Ссылка функции на прототип
apply
(thisArg, arguments)Вызывает функцию с подменой контекста
functionName.apply(thisArg, param1, param2)
bind
(context, ...arguments)Возвращает новую функцию, которая вызывает данную, как метод указанного объекта с указанными аргументами.
Таким образом можно подменить контекст
function f(){
alert(1);
};
var g = f.bind("Context", 1, 2);
// эквивалентно f.call("Context", 1, 2);
// карирование, фиксирование аргументов
function mull(a, b){
return a * b;
}
var double = mul.bind(null, 2)
double(3);
// mul(2, 3) = 6
call
(obj, argument1, ...)Вызывает функцию как метод указанного объекта
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
isFinite
()Возвращает true только тогда, когда n — обычное число, а не одно из NaN , Infinity и ‐Infinit
isFinite(1);
// true
isFinite(Infinity);
// false
isFinite(NaN);
// false