Προς το περιεχόμενο

Simple javascript question


Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Καλησπέρα σε όλους! Μιας και είμαι νέος στη Javascript θα ήθελα κάποιος να μου αποσαφηνίσει το εξής: στην calcTips function χρειάζεται παράμετρος? Όχι? Ή δεν έχει σημασία...γενικά δεν έχω πολυκαταλάβει σε ποιες περιπτώσεις μπαίνει παράμετρος στις functions και σε ποιες όχι(πχ το συγκεκριμένο παράδειγμα δουλεύει είτε βάλω, είτε όχι). Btw στο ακόλουθο παράδειγμα κώδικα γίνεται ένας απλός υπολογισμός των tips που αφήνει κάποιος σ ένα εστιατόριο και της συνολικής τιμής που πληρώνει(συμπεριλαμβανομένων των tips).

var john = {
    fullName: 'John Smith',
    bills: [124, 48, 268, 180, 42],
    calcTips: function(bill) {
         this.tips = [];
         this.finalValues = [];
        
        for (var i=0; i<this.bills.length; i++) {
            var tip;
            var bill = this.bills[i]; 
        if(bill<50) {
            tip = bill * 20/100;
        } else if (bill>=50 && bill<200) {
	       tip = bill * 15/100;
} else {
	 tip = bill *10/100;
}
//Array which contains all the tips 
//Array which contains the final payment
    this.tips[i] = tip;
    this.finalValues[i] = tip + bill;

}
    }
}

john.calcTips();
console.log(john);

 

Επεξ/σία από AndreasV.
Δημοσ.

Αν προσπαθείς να καταλάβεις τα βασικά, αυτό δεν είναι το καλύτερο παράδειγμα. Υπάρχουν τόσα πράγματα ενδιάμεσα σε αυτό που ρωτάς και αυτό που συμβαίνει που δεν ξέρω αν αυτό που θα σου πω θα έχει νόημα για σένα, αλλά:

το john είναι ένα object και το this είναι ένα keyword που στην περίπτωση του calctips αναφέρεται στο ίδιο το object. Δηλαδή

var obj = {a: 999, b: function() { return this.a;}}

console.log(obj.b()) // => 999

Τώρα, στο function περνάς μια παράμετρο bill. Το πρώτο πράγμα που γίνεται όταν 'τρέξει' το function, είναι να φτιαχτεί ένα local scope με ότι μεταβλητές δηλώνονται σαν παράμετροι ή μέσα στο body του function. Το bill δηλώνεται σαν παράμετρος άρα μπαίνει αυτόματα στις local variables του function και λίγο πιο κάτω, το ξανακάνεις initialize και του αναθέτεις μια τιμή.

Αυτό αφενός δεν έχει νόημα γιατί δεν χρησιμοποιείς την παράμετρο, αφετέρου αν αντί για var η μεταβλητή δηλωθεί με let δεύτερη φορά, θα προκύψει συντακτικό σφάλμα (που είναι και το λογικό).

Η παράμετρος, έχει νόημα μόνο αν την χρησιμοποιήσεις όταν καλείς το function, δηλαδή 

function foo(number){
  console.log(number*2);
}

foo(100); // => 200
foo(200); // => 400

 

Επομένως, στη συγκεκριμένη περίπτωση,  η παράμετρος ούτε νόημα έχει, ούτε χρησιμοποιείται πουθενά. Το bill έρχειται από το this.bills που αναφέρεται στο bills property του object μέσα στο οποίο βρίσκεται η function.

 

  • Like 1
Δημοσ.

Αυτο ειχα καταλαβει κι εγω...οτι η παραμετρος εχει νοημα οταν καλεις τη function δινοντας τιμη συγκεκριμενη αλλα ηθελα να ειμαι απολυτα σιγουρος οτι ετσι συμβαινει. Ευχαριστω!

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...