Definicje funkcji JavaScript
Funkcje JavaScript są definiowane za pomocą
function
słowa kluczowego.
Możesz użyć deklaracji funkcji lub wyrażenia funkcji .
Deklaracje funkcji
Wcześniej w tym samouczku dowiedziałeś się, że funkcje są deklarowane z następującą składnią:
function functionName(parameters) {
// code to be executed
}
Zadeklarowane funkcje nie są wykonywane natychmiast. Są „zapisywane do późniejszego użycia” i zostaną wykonane później, gdy zostaną wywołane (wywołane).
Przykład
function myFunction(a, b) {
return a * b;
}
Średniki służą do oddzielania wykonywalnych instrukcji JavaScript.
Ponieważ deklaracja funkcji nie jest instrukcją wykonywalną, często kończy się ją średnikiem.
Wyrażenia funkcyjne
Funkcję JavaScript można również zdefiniować za pomocą wyrażenia .
Wyrażenie funkcyjne może być przechowywane w zmiennej:
Przykład
const x = function (a, b) {return a * b};
Po zapisaniu wyrażenia funkcyjnego w zmiennej, zmienna może być używana jako funkcja:
Przykład
const x = function (a, b) {return a * b};
let z = x(4, 3);
Powyższa funkcja jest w rzeczywistości funkcją anonimową (funkcją bez nazwy).
Funkcje przechowywane w zmiennych nie potrzebują nazw funkcji. Są one zawsze wywoływane (wywoływane) przy użyciu nazwy zmiennej.
Powyższa funkcja kończy się średnikiem, ponieważ jest częścią instrukcji wykonywalnej.
Konstruktor Function()
Jak widzieliście w poprzednich przykładach, funkcje JavaScript są definiowane za pomocą function
słowa kluczowego.
Funkcje można również definiować za pomocą wbudowanego konstruktora funkcji JavaScript o nazwie
Function()
.
Przykład
const myFunction = new Function("a", "b", "return a * b");
let x = myFunction(4, 3);
W rzeczywistości nie musisz używać konstruktora funkcji. Powyższy przykład jest taki sam jak pisanie:
Przykład
const myFunction = function (a, b) {return a * b};
let x = myFunction(4, 3);
W większości przypadków możesz uniknąć używania new
słowa kluczowego w JavaScript.
Podnoszenie funkcji
Wcześniej w tym samouczku poznałeś „podnoszenie” ( JavaScript Hoisting ).
Podnoszenie jest domyślnym zachowaniem JavaScript polegającym na przenoszeniu deklaracji na górę bieżącego zakresu.
Podnoszenie dotyczy deklaracji zmiennych i deklaracji funkcji.
Z tego powodu funkcje JavaScript mogą być wywoływane przed ich zadeklarowaniem:
myFunction(5);
function myFunction(y) {
return y * y;
}
Funkcje zdefiniowane za pomocą wyrażenia nie są przenoszone.
Funkcje samopowtarzalne
Wyrażenia funkcji mogą być „samo-wywołujące”.
Wyrażenie samopowtarzalne jest wywoływane (uruchamiane) automatycznie, bez wywoływania.
Wyrażenia funkcji zostaną wykonane automatycznie, jeśli po wyrażeniu nastąpi ().
Nie można samodzielnie wywołać deklaracji funkcji.
Musisz dodać nawiasy wokół funkcji, aby wskazać, że jest to wyrażenie funkcji:
Przykład
(function () {
let x = "Hello!!"; // I will invoke myself
})();
Powyższa funkcja jest w rzeczywistości anonimową funkcją samowywołującą się (funkcja bez nazwy).
Funkcje mogą być używane jako wartości
Funkcje JavaScript mogą być używane jako wartości:
Przykład
function myFunction(a, b) {
return a * b;
}
let x = myFunction(4, 3);
Funkcje JavaScript mogą być używane w wyrażeniach:
Przykład
function myFunction(a, b) {
return a * b;
}
let x = myFunction(4, 3) * 2;
Funkcje są obiektami
Operator typeof
w JavaScript zwraca "funkcję" dla funkcji.
Jednak funkcje JavaScript najlepiej można opisać jako obiekty.
Funkcje JavaScript mają zarówno właściwości , jak i metody .
Właściwość arguments.length
zwraca liczbę argumentów otrzymanych przy wywołaniu funkcji:
Przykład
function myFunction(a, b) {
return arguments.length;
}
Metoda toString()
zwraca funkcję jako ciąg znaków:
Przykład
function myFunction(a, b) {
return a * b;
}
let text = myFunction.toString();
Funkcja zdefiniowana jako właściwość obiektu nazywana jest metodą obiektu.
Funkcja przeznaczona do tworzenia nowych obiektów nazywana jest konstruktorem obiektów.
Funkcje strzałek
Funkcje strzałek umożliwiają krótką składnię do pisania wyrażeń funkcyjnych.
Nie potrzebujesz function
słowa kluczowego, return
słowa kluczowego i
nawiasów klamrowych .
Przykład
// ES5
var x = function(x, y) {
return x * y;
}
// ES6
const x = (x, y) => x * y;
Funkcje strzałek nie mają własnych this
. Nie nadają się do definiowania metod obiektowych .
Funkcje strzałek nie są podnoszone. Muszą być zdefiniowane przed użyciem.
Używanie const
jest bezpieczniejsze niż używanie var
, ponieważ wyrażenie funkcji ma zawsze stałą wartość.
return
Słowo kluczowe i nawiasy klamrowe można pominąć tylko wtedy, gdy funkcja jest pojedynczą instrukcją. Z tego powodu dobrym nawykiem może być trzymanie ich zawsze:
Przykład
const x = (x, y) => { return x * y };
Funkcje strzałek nie są obsługiwane w IE11 i wcześniejszych.