Κοινή χρήση τεχνολογίας

Προηγμένος προγραμματισμός JavaScript (Τέταρτη Έκδοση) -- Εκμάθηση Λειτουργιών Εγγραφής (Μέρος 1)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

λειτουργία

Κάθε συνάρτηση είναι μια παρουσία του τύπου Function και η Function έχει επίσης ιδιότητες και μεθόδους, όπως και άλλοι τύποι αναφοράς. Οι συναρτήσεις είναι αντικείμενα και το όνομα της συνάρτησης είναι δείκτης στο αντικείμενο συνάρτησης και δεν είναι απαραίτητα στενά συνδεδεμένο με την ίδια τη συνάρτηση.

Συνάρτηση δηλωτικός ορισμός ορισμού συνάρτησης

  1. function sum (n1,n2){
  2. return n1+n2;
  3. }

Έκφραση συνάρτησης ορισμού συνάρτησης

  1. let sum = function(n1,n2){
  2. return n1+n2;
  3. };

ορισμός συνάρτησης συνάρτηση βέλους

  1. let sum = (n1,n2)=>{
  2. return n1+n2;
  3. };

κατασκευαστής ορισμού συνάρτησης

  1. let sum = new Function("n1","n2","return n1+n2");
  2. /*这个构造函数接收任意多个字符串参数,
  3. 最后一个参数始终会被当成函数体,
  4. 而之前的参数都是新函数的参数*/

λειτουργία βέλους

Οι συναρτήσεις βέλους μπορούν να χρησιμοποιηθούν οπουδήποτε μπορεί να χρησιμοποιηθεί μια έκφραση συνάρτησης.

  1. let sum = (a,b)=>{
  2. return a+b;
  3. };
  4. let sum1 = function(a,b){
  5. return a+b;
  6. };
  7. //箭头函数适合嵌入函数的场景
  8. let arr = [1,2,3];
  9. console.log(arr.map(function(i) {return i+1;}));
  10. console.log(arr.map((i)=>{return i+1;}));
  11. //二者结果一样,但是箭头函数更为简洁
  12. //如果只有一个参数,括号可以不用。只有没有参数,或者多个参数的情况下,才使用括号
  13. let double = (x)=>{return 2*x;};
  14. let triple = x => {return 3*x};
  15. //箭头函数也可以不使用大括号,但这样会改变函数的行为。使用大括号就说明包含函数体,可以在一
  16. //个函数中包含多条语句,跟常规函数一样。如果不使用,后面只能有一行代码。
  17. let double = (x)=>{return 2*x;};
  18. let triple = x=>3*x;

Αν και οι συναρτήσεις βέλους έχουν απλή σύνταξη, υπάρχουν πολλές περιπτώσεις όπου δεν είναι κατάλληλες. Οι συναρτήσεις βέλους δεν μπορούν να χρησιμοποιήσουν ορίσματα, super, new.target, ούτε μπορούν να χρησιμοποιηθούν ως κατασκευαστές. Επιπλέον, οι συναρτήσεις βέλους δεν έχουν χαρακτηριστικό πρωτότυπο.

Παράμετροι σε συναρτήσεις βέλους

Η συνάρτηση ορίζεται χρησιμοποιώντας τη σύνταξη βέλους, επομένως οι παράμετροι που μεταβιβάζονται στη συνάρτηση δεν μπορούν να προσπελαστούν χρησιμοποιώντας τη λέξη-κλειδί ορισμάτων, αλλά μπορούν να προσπελαστούν μόνο μέσω των καθορισμένων ονομαστικών παραμέτρων.

  1. function foo() {
  2. console.log(arguments[0]);
  3. }
  4. foo(5); // 5
  5. let bar = () => {
  6. console.log(arguments[0]);
  7. };
  8. bar(5); // ReferenceError: arguments is not defined

Όνομα συνάρτησης

Μια συνάρτηση μπορεί να έχει πολλά ονόματα.

  1. function sum(num1, num2) {
  2. return num1 + num2;
  3. }
  4. console.log(sum(10, 10)); // 20
  5. let anotherSum = sum;
  6. console.log(anotherSum(10, 10)); // 20
  7. sum = null;
  8. console.log(anotherSum(10, 10)); // 20

Προεπιλεγμένη τιμή παραμέτρου

Μπορείτε να αντιστοιχίσετε μια προεπιλεγμένη τιμή σε μια παράμετρο χρησιμοποιώντας το = μετά την παράμετρο στον ορισμό της συνάρτησης.

  1. function makeKing(name = 'Henry') {
  2. return `King ${name} VIII`;
  3. }
  4. console.log(makeKing('Louis')); // 'King Louis VIII'
  5. console.log(makeKing()); // 'King Henry VIII'

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

  1. let romanNumerals = ['I', 'II', 'III', 'IV', 'V', 'VI'];
  2. let ordinality = 0;
  3. function getNumerals() {
  4. // 每次调用后递增
  5. return romanNumerals[ordinality++];
  6. }
  7. function makeKing(name = 'Henry', numerals = getNumerals()) {
  8. return `King ${name} ${numerals}`;
  9. }
  10. console.log(makeKing()); // 'King Henry I'
  11. console.log(makeKing('Louis', 'XVI')); // 'King Louis XVI'
  12. console.log(makeKing()); // 'King Henry II'
  13. console.log(makeKing()); // 'King Henry III'

Επέκταση και συλλογή παραμέτρων

Το ES6 προσθέτει έναν νέο τελεστή επέκτασης, ο οποίος μπορεί να χρησιμοποιηθεί για τη λειτουργία και τον συνδυασμό δεδομένων συλλογής πολύ συνοπτικά. Το πιο χρήσιμο σενάριο για τον τελεστή spread είναι η λίστα παραμέτρων σε έναν ορισμό συνάρτησης, όπου μπορεί να εκμεταλλευτεί πλήρως τις αδύναμες παραμέτρους πληκτρολόγησης και μεταβλητού μήκους της γλώσσας. Ο τελεστής διασποράς μπορεί να χρησιμοποιηθεί για τη μετάδοση παραμέτρων κατά την κλήση μιας συνάρτησης ή για τον καθορισμό παραμέτρων συνάρτησης.

Εκτεταμένες παράμετροι

  1. let values = [1, 2, 3, 4];
  2. function getSum() {
  3. let sum = 0;
  4. for (let i = 0; i < arguments.length; ++i) {
  5. sum += arguments[i];
  6. }
  7. return sum;
  8. }
  9. //不使用扩展操作符实现累加
  10. console.log(getSum.apply(null,values));
  11. //使用扩展操作符
  12. console.log(getSum(...values));

Συλλέξτε παραμέτρους

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

  1. function getProduct(...values,lastValue){}//不可以
  2. function ignoreFirst(firstValue,...values){console.log(values)}//可以
  3. ignoreFirst(); // []
  4. ignoreFirst(1); // []
  5. ignoreFirst(1,2); // [2]
  6. ignoreFirst(1,2,3); // [2, 3]

Δήλωση συνάρτησης και έκφραση συνάρτησης

Πριν από την εκτέλεση οποιουδήποτε κώδικα, η μηχανή JavaScript διαβάζει τη δήλωση συνάρτησης και δημιουργεί τον ορισμό της συνάρτησης στο πλαίσιο εκτέλεσης. Η παράσταση συνάρτησης πρέπει να περιμένει μέχρι να εκτελεστεί ο κώδικας στη γραμμή της πριν δημιουργηθεί ο ορισμός της συνάρτησης στο περιβάλλον εκτέλεσης.
  1. // 没问题
  2. console.log(sum(10, 10));
  3. function sum(num1, num2) {
  4. return num1 + num2;
  5. }
  6. /*函数声明提升*/
  7. // 会出错
  8. console.log(sum(10, 10));
  9. let sum = function(num1, num2) {
  10. return num1 + num2;
  11. };