Διαδρομές
/
JavaScript
JavaScript
/
Ύλη
/
Συναρτήσεις
Συ

Συναρτήσεις σε JavaScript

6 ασκήσεις

Σχετικά με την έννοια Συναρτήσεις

Μια συνάρτηση είναι ένα μπλοκ οργανωμένου, επαναχρησιμοποιήσιμου κώδικα που χρησιμοποιείται για την εκτέλεση κάποιας ενέργειας. Υπάρχουν πολλοί τρόποι για να ορίσεις συναρτήσεις στη JavaScript. Εδώ θα δούμε τις δηλώσεις συνάρτησης και τις εκφράσεις συνάρτησης. Άλλες δυνατότητες, όπως οι arrow functions, θα καλυφθούν σε άλλες έννοιες.

Δήλωση συνάρτησης

Ο καθιερωμένος τρόπος για να ορίσεις μια συνάρτηση στη JavaScript είναι η δήλωση συνάρτησης, που ονομάζεται επίσης ορισμός συνάρτησης ή εντολή συνάρτησης.

Αποτελείται από τη λέξη-κλειδί function, το όνομα της συνάρτησης και μια λίστα παραμέτρων χωρισμένων με κόμμα, μέσα σε παρενθέσεις. Ακολουθεί το σώμα της συνάρτησης (η συλλογή εντολών που καθορίζει τι κάνει μια συνάρτηση), μέσα σε άγκιστρα.

function someName(param1, param2, param3) {
  // ...
}

Χρήση μιας συνάρτησης

Στη JavaScript, μια συνάρτηση καλείται αναφέροντας το όνομα της συνάρτησης ακολουθούμενο από παρενθέσεις που περιέχουν τα ορίσματα.

someName(arg1, arg2, arg3);

Το να αναφέρεις απλώς το όνομα της συνάρτησης δεν καλεί τη συνάρτηση στη JavaScript.

function sayHello() {
  console.log('Hello, World!');
}

sayHello;
// => [Function: sayHello]
// The text representations varies between environments.

sayHello();
// => 'Hello, World!'

Παράμετροι

Όταν δουλεύεις με παραμέτρους μέσα στο σώμα της συνάρτησης, να έχεις υπόψη σου τις πιθανές παρενέργειες στην αρχική τιμή που πέρασε στη συνάρτηση. Στη JavaScript, ένα όρισμα είναι ένα αντίγραφο μιας αναφοράς στην αρχική τιμή. Το τι σημαίνει αυτό στην πράξη εξαρτάται από τον τύπο δεδομένων του ορίσματος.

  • Οι τιμές των πρωτόγονων τύπων δεδομένων είναι αμετάβλητες. Όλες οι "τροποποιήσεις" δημιουργούν πάντα μια νέα πρωτόγονη τιμή. Γι' αυτό, η αρχική τιμή δεν επηρεάζεται ποτέ από το τι συμβαίνει στο όρισμα μέσα στο σώμα της συνάρτησης.

    const num = 0;
    
    function increase(number) {
      number = number + 1;
    }
    
    increase(num);
    num;
    // => 0
    
  • Διαφορετικά είναι τα πράγματα για τιμές όπως τα αντικείμενα, οι πίνακες και οι συναρτήσεις. Εφόσον η αναφορά αντιγράφεται, μια εκ νέου ανάθεση δεν θα επηρεάσει την αρχική τιμή. Ωστόσο, επειδή έχεις να κάνεις με ένα ρηχό αντίγραφο, η τροποποίηση του ορίσματος μέσα στο σώμα της συνάρτησης θα αλλάξει και την αρχική τιμή που πέρασε.

    const nums = [0, 1, 2, 3, 4];
    
    function pushFive(arr) {
      arr.push(5);
    }
    
    pushFive(nums);
    nums;
    // => [0, 1, 2, 3, 4, 5]
    

Από προεπιλογή, όλες οι παράμετροι που ορίζονται στη δήλωση της συνάρτησης είναι προαιρετικές στη JavaScript. Αν σε μια συνάρτηση δοθούν λιγότερα ορίσματα από όσες είναι οι παράμετροι, τα ορίσματα που λείπουν θα είναι undefined μέσα στο σώμα της συνάρτησης, δες Null and Undefined. Σε πολλές περιπτώσεις, έχει περισσότερο νόημα να αρχικοποιήσεις μια παράμετρο με μια προεπιλεγμένη τιμή, αν δεν περαστεί καμία τιμή ή κάποια ιδιότητα undefined. Αυτό μπορεί να γίνει ορίζοντας προεπιλεγμένες παραμέτρους απευθείας στον ορισμό της συνάρτησης.

function someName(param1 = defaultValue1, param2 = defaultValue2) {
  // ...
}

Μια συνάρτηση μπορεί να κληθεί με περισσότερα ορίσματα από όσες ήταν οι παράμετροι στον ορισμό της. Όλα τα ορίσματα, μαζί και αυτά τα επιπλέον, βρίσκονται στον πίνακα "arguments".

Είναι επίσης δυνατό να ορίσεις συναρτήσεις που δέχονται οποιονδήποτε αριθμό ορισμάτων (συναρτήσεις μεταβλητού αριθμού ορισμάτων), δες τις παραμέτρους rest στους Rest and Spread Operators για περισσότερες λεπτομέρειες.

Εντολή return

Μια εντολή return τερματίζει την εκτέλεση της συνάρτησης και καθορίζει μια τιμή που θα επιστραφεί σε αυτόν που κάλεσε τη συνάρτηση. Μια συνάρτηση μπορεί να έχει πολλές εντολές return.

function checkNumber(num) {
  if (num === 0) {
    return 'You passed 0, please provide another number.';
  }

  return 'Thanks for passing such a nice number.';
}

Το αποτέλεσμα μιας συνάρτησης που δεν επιστρέφει καμία τιμή ή που δεν έχει εντολή return είναι undefined. Δεν υπάρχουν υπονοούμενες εντολές return στη JavaScript.

function nakedReturn(a) {
  a * 2;
  return;
}

nakedReturn(1);
// => undefined

function noReturn(a) {
  a * 2;
}

noReturn(1);
// => undefined

Στη JavaScript, μπορείς να επιστρέψεις μόνο μία τιμή. Αν θέλεις να περάσεις περισσότερες πληροφορίες, πρέπει πρώτα να τις συνδυάσεις σε μία οντότητα, συνήθως σε ένα αντικείμενο ή σε έναν πίνακα.

function divide(a, b) {
  return {
    quotient: Math.floor(a / b),
    remainder: a % b,
  };
}

Έκφραση συνάρτησης

Μια δήλωση συνάρτησης είναι μια αυτόνομη εντολή. Αλλά μερικές φορές είναι χρήσιμο να ορίσεις μια συνάρτηση ως μέρος μιας άλλης έκφρασης, π.χ. σε μια ανάθεση, ως παράμετρο συνάρτησης (callback) ή ως τιμή μέσα σε ένα αντικείμενο. Αυτό μπορεί να γίνει με μια έκφραση συνάρτησης. Έχει την ίδια σύνταξη με μια δήλωση συνάρτησης, μόνο που το όνομα της συνάρτησης μπορεί να παραλειφθεί, δημιουργώντας μια ανώνυμη συνάρτηση.

const someFunction = function (param) {
  // ...
};

someOtherFunction(function (param) {
  // ...
});

const obj = {
  someFunction: function (param) {
    // ...
  },
};

Εμβέλεια

Μια συνάρτηση εισάγει ένα νέο περιβάλλον εκτέλεσης στη JavaScript. Οι μεταβλητές που ορίζονται μέσα σε μια συνάρτηση δεν είναι προσβάσιμες έξω από αυτήν. Αλλά οι μεταβλητές που ορίζονται στη γονική εμβέλεια (την εμβέλεια όπου ορίστηκε η ίδια η συνάρτηση) είναι προσβάσιμες μέσα στη συνάρτηση. Η τεκμηρίωση του MDN για την εμβέλεια δείχνει παραδείγματα αυτής της συμπεριφοράς.

Ρίξε μια ματιά στα closures για να μάθεις περισσότερα για την εμβέλεια των μεταβλητών στη JavaScript.

Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα

Μάθε την έννοια Συναρτήσεις