Function¶
// эта функция будет создана в самом начале при чтении скрипта
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¶
- class
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