Hướng dẫn what are the functions of javascript? - các chức năng của javascript là gì?


Hàm JavaScript là một khối mã được thiết kế để thực hiện một nhiệm vụ cụ thể.

Một hàm JavaScript được thực thi khi "một cái gì đó" gọi nó (gọi nó).


Thí dụ

// Chức năng để tính toán sản phẩm của hàm p1 và p2 myFunction (p1, p2) {& nbsp; trả lại p1 * p2; }
function myFunction(p1, p2) {
  return p1 * p2;
}

Hãy tự mình thử »


Cú pháp chức năng JavaScript

Một hàm JavaScript được xác định với từ khóa

function myFunc(theArr) {
  theArr[0] = 30;
}

const arr = [45];

console.log(arr[0]); // 45
myFunc(arr);
console.log(arr[0]); // 30
6, theo sau là một tên, theo sau là dấu ngoặc đơn ().name, followed by parentheses ().

Tên chức năng có thể chứa các chữ cái, chữ số, dấu gạch dưới và dấu hiệu đô la (cùng quy tắc với các biến).

Các dấu ngoặc đơn có thể bao gồm các tên tham số được phân tách bằng dấu phẩy: (tham số1, tham số2, ...)
(parameter1, parameter2, ...)

Mã được thực thi, theo hàm, được đặt bên trong dấu ngoặc xoăn: {}{}

Tên hàm (tham số1, tham số2, tham số3) {& nbsp; // Mã được thực thi}
  // code to be executed
}

Các tham số chức năng được liệt kê bên trong dấu ngoặc đơn () trong định nghĩa hàm.parameters are listed inside the parentheses () in the function definition.

Đối số chức năng là các giá trị nhận được bởi hàm khi nó được gọi.arguments are the values received by the function when it is invoked.

Bên trong hàm, các đối số (các tham số) hoạt động như các biến cục bộ.


Hàm gọi

Mã bên trong hàm sẽ thực thi khi "một cái gì đó" gọi (cuộc gọi) hàm:invokes (calls) the function:

  • Khi một sự kiện xảy ra (khi người dùng nhấp vào nút)
  • Khi nó được gọi (được gọi) từ mã JavaScript
  • Tự động (tự gọi)

Bạn sẽ tìm hiểu thêm về việc gọi chức năng sau này trong hướng dẫn này.



Chức năng trả về

Khi JavaScript đạt đến câu lệnh

function myFunc(theArr) {
  theArr[0] = 30;
}

const arr = [45];

console.log(arr[0]); // 45
myFunc(arr);
console.log(arr[0]); // 30
7, chức năng sẽ ngừng thực thi.

Nếu hàm được gọi từ một câu lệnh, JavaScript sẽ "trả lại" để thực thi mã sau câu lệnh gọi.

Các chức năng thường tính toán giá trị trả về. Giá trị trả về được "trả về" trở lại "người gọi":return value. The return value is "returned" back to the "caller":

Thí dụ

Tính toán sản phẩm của hai số và trả về kết quả:

Đặt x = myfunction (4, 3); & nbsp; & nbsp; & nbsp; // hàm được gọi, giá trị trả về sẽ kết thúc trong x

hàm myfunction (a, b) {& nbsp; trả về a * b; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; // chức năng trả về sản phẩm của A và B}
  return a * b;             // Function returns the product of a and b
}

Kết quả trong x sẽ là:

function myFunc(theArr) {
  theArr[0] = 30;
}

const arr = [45];

console.log(arr[0]); // 45
myFunc(arr);
console.log(arr[0]); // 30
8

Hãy tự mình thử »


Cú pháp chức năng JavaScript

Một hàm JavaScript được xác định với từ khóa

function myFunc(theArr) {
  theArr[0] = 30;
}

const arr = [45];

console.log(arr[0]); // 45
myFunc(arr);
console.log(arr[0]); // 30
6, theo sau là một tên, theo sau là dấu ngoặc đơn ().

Tên chức năng có thể chứa các chữ cái, chữ số, dấu gạch dưới và dấu hiệu đô la (cùng quy tắc với các biến).

Thí dụ

Các dấu ngoặc đơn có thể bao gồm các tên tham số được phân tách bằng dấu phẩy: (tham số1, tham số2, ...)

Mã được thực thi, theo hàm, được đặt bên trong dấu ngoặc xoăn: {}
  return (5/9) * (fahrenheit-32);
}
document.getElementById("demo").innerHTML = toCelsius(77);

Hãy tự mình thử »


Cú pháp chức năng JavaScript

Một hàm JavaScript được xác định với từ khóa

function myFunc(theArr) {
  theArr[0] = 30;
}

const arr = [45];

console.log(arr[0]); // 45
myFunc(arr);
console.log(arr[0]); // 30
6, theo sau là một tên, theo sau là dấu ngoặc đơn ().

Tên chức năng có thể chứa các chữ cái, chữ số, dấu gạch dưới và dấu hiệu đô la (cùng quy tắc với các biến).

Thí dụ

Các dấu ngoặc đơn có thể bao gồm các tên tham số được phân tách bằng dấu phẩy: (tham số1, tham số2, ...)
  return (5/9) * (fahrenheit-32);
}
document.getElementById("demo").innerHTML = toCelsius;

Hãy tự mình thử »


Mã được thực thi, theo hàm, được đặt bên trong dấu ngoặc xoăn: {}

Tên hàm (tham số1, tham số2, tham số3) {& nbsp; // Mã được thực thi}

Thí dụ

Các tham số chức năng được liệt kê bên trong dấu ngoặc đơn () trong định nghĩa hàm.

Đối số chức năng là các giá trị nhận được bởi hàm khi nó được gọi.
let text = "The temperature is " + x + " Celsius";

Bên trong hàm, các đối số (các tham số) hoạt động như các biến cục bộ.

Hàm gọi

Hãy tự mình thử »

Mã bên trong hàm sẽ thực thi khi "một cái gì đó" gọi (cuộc gọi) hàm:


Khi một sự kiện xảy ra (khi người dùng nhấp vào nút)

Khi nó được gọi (được gọi) từ mã JavaScript LOCAL to the function.

Tự động (tự gọi)

Thí dụ

Bạn sẽ tìm hiểu thêm về việc gọi chức năng sau này trong hướng dẫn này.

Chức năng trả về
  let carName = "Volvo";
  // code here CAN use carName
}

Khi JavaScript đạt đến câu lệnh

function myFunc(theArr) {
  theArr[0] = 30;
}

const arr = [45];

console.log(arr[0]); // 45
myFunc(arr);
console.log(arr[0]); // 30
7, chức năng sẽ ngừng thực thi.

Hãy tự mình thử »

Nếu hàm được gọi từ một câu lệnh, JavaScript sẽ "trả lại" để thực thi mã sau câu lệnh gọi.

Các chức năng thường tính toán giá trị trả về. Giá trị trả về được "trả về" trở lại "người gọi":


Tính toán sản phẩm của hai số và trả về kết quả:

Exercise:

Đặt x = myfunction (4, 3); & nbsp; & nbsp; & nbsp; // hàm được gọi, giá trị trả về sẽ kết thúc trong x

function myFunction() {
  alert("Hello World!");
}
;

hàm myfunction (a, b) {& nbsp; trả về a * b; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; // chức năng trả về sản phẩm của A và B}



  • " Trước
  • Tiếp theo "

Chức năng chính trong JavaScript là gì?

Xem thêm Chương tham chiếu toàn diện về các chức năng JavaScript để tìm hiểu các chi tiết.

Xác định chức năng

Tuyên bố chức năng

Một định nghĩa chức năng (còn được gọi là khai báo chức năng hoặc câu lệnh hàm) bao gồm từ khóa

function myFunc(theArr) {
  theArr[0] = 30;
}

const arr = [45];

console.log(arr[0]); // 45
myFunc(arr);
console.log(arr[0]); // 30
6, theo sau là:function definition (also called a function declaration, or function statement) consists of the
function myFunc(theArr) {
  theArr[0] = 30;
}

const arr = [45];

console.log(arr[0]); // 45
myFunc(arr);
console.log(arr[0]); // 30
6 keyword, followed by:

  • Tên của hàm.
  • Một danh sách các tham số cho hàm, được đặt trong dấu ngoặc đơn và được phân tách bằng dấu phẩy.
  • Các câu lệnh JavaScript xác định hàm, được đặt trong ngoặc xoăn,
    const square = function (number) {
      return number * number;
    }
    const x = square(4); // x gets the value 16
    
    3.

Ví dụ: mã sau xác định một hàm đơn giản có tên

const square = function (number) {
  return number * number;
}
const x = square(4); // x gets the value 16
4:

function square(number) {
  return number * number;
}

Hàm

const square = function (number) {
  return number * number;
}
const x = square(4); // x gets the value 16
4 có một tham số, được gọi là
const square = function (number) {
  return number * number;
}
const x = square(4); // x gets the value 16
6. Hàm bao gồm một câu lệnh cho biết trả về tham số của hàm (nghĩa là
const square = function (number) {
  return number * number;
}
const x = square(4); // x gets the value 16
6) nhân với chính nó. Câu lệnh
function myFunc(theArr) {
  theArr[0] = 30;
}

const arr = [45];

console.log(arr[0]); // 45
myFunc(arr);
console.log(arr[0]); // 30
7 Chỉ định giá trị được trả về bởi hàm:

Các tham số về cơ bản được truyền đến các hàm theo giá trị - vì vậy nếu mã trong phần thân của hàm gán một giá trị hoàn toàn mới cho một tham số được truyền cho hàm, sự thay đổi không được phản ánh trên toàn cầu hoặc trong mã được gọi là hàm đó.by value — so if the code within the body of a function assigns a completely new value to a parameter that was passed to the function, the change is not reflected globally or in the code which called that function.

Khi bạn chuyển một đối tượng dưới dạng tham số, nếu hàm thay đổi thuộc tính của đối tượng, thay đổi đó có thể hiển thị bên ngoài hàm, như trong ví dụ sau:

function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;

Khi bạn chuyển một mảng làm tham số, nếu hàm thay đổi bất kỳ giá trị nào của mảng, thay đổi đó có thể hiển thị bên ngoài hàm, như trong ví dụ sau:

function myFunc(theArr) {
  theArr[0] = 30;
}

const arr = [45];

console.log(arr[0]); // 45
myFunc(arr);
console.log(arr[0]); // 30

Biểu thức chức năng

Trong khi khai báo hàm ở trên là một câu lệnh, các hàm cũng có thể được tạo bằng một biểu thức chức năng.

Một chức năng như vậy có thể ẩn danh; Nó không phải có một cái tên. Ví dụ: hàm

const square = function (number) {
  return number * number;
}
const x = square(4); // x gets the value 16
4 có thể được định nghĩa là:anonymous; it does not have to have a name. For example, the function
const square = function (number) {
  return number * number;
}
const x = square(4); // x gets the value 16
4 could have been defined as:

const square = function (number) {
  return number * number;
}
const x = square(4); // x gets the value 16

Tuy nhiên, một tên có thể được cung cấp với một biểu thức chức năng. Cung cấp tên cho phép chức năng đề cập đến chính nó và cũng giúp dễ dàng xác định chức năng trong dấu vết ngăn xếp của trình gỡ lỗi:

const factorial = function fac(n) {
  return n < 2 ? 1 : n * fac(n - 1);
}

console.log(factorial(3))

Biểu thức chức năng thuận tiện khi chuyển một hàm như một đối số cho một hàm khác. Ví dụ sau đây hiển thị hàm

const factorial = function fac(n) {
  return n < 2 ? 1 : n * fac(n - 1);
}

console.log(factorial(3))
0 sẽ nhận chức năng là đối số thứ nhất và một mảng là đối số thứ hai:

function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

Trong mã sau, hàm nhận được một hàm được xác định bởi biểu thức chức năng và thực thi nó cho mọi yếu tố của mảng nhận được dưới dạng đối số thứ hai:

function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);

Hàm trả về:

const factorial = function fac(n) {
  return n < 2 ? 1 : n * fac(n - 1);
}

console.log(factorial(3))
1.

Trong JavaScript, một hàm có thể được xác định dựa trên một điều kiện. Ví dụ: định nghĩa chức năng sau đây xác định

const factorial = function fac(n) {
  return n < 2 ? 1 : n * fac(n - 1);
}

console.log(factorial(3))
2 chỉ khi
const factorial = function fac(n) {
  return n < 2 ? 1 : n * fac(n - 1);
}

console.log(factorial(3))
3 bằng
const factorial = function fac(n) {
  return n < 2 ? 1 : n * fac(n - 1);
}

console.log(factorial(3))
4:

let myFunc;
if (num === 0) {
  myFunc = function (theObject) {
    theObject.make = 'Toyota';
  }
}

Ngoài việc xác định các chức năng như được mô tả ở đây, bạn cũng có thể sử dụng hàm tạo

const factorial = function fac(n) {
  return n < 2 ? 1 : n * fac(n - 1);
}

console.log(factorial(3))
5 để tạo các chức năng từ một chuỗi trong thời gian chạy, giống như
const factorial = function fac(n) {
  return n < 2 ? 1 : n * fac(n - 1);
}

console.log(factorial(3))
6.

Phương pháp là một hàm là thuộc tính của một đối tượng. Đọc thêm về các đối tượng và phương pháp trong làm việc với các đối tượng.method is a function that is a property of an object. Read more about objects and methods in Working with objects.

Gọi chức năng

Xác định một chức năng không thực thi nó. Xác định nó đặt tên cho chức năng và chỉ định những việc cần làm khi hàm được gọi.

Gọi hàm thực sự thực hiện các hành động được chỉ định với các tham số được chỉ định. Ví dụ: nếu bạn xác định chức năng

const square = function (number) {
  return number * number;
}
const x = square(4); // x gets the value 16
4, bạn có thể gọi nó như sau: the function actually performs the specified actions with the indicated parameters. For example, if you define the function
const square = function (number) {
  return number * number;
}
const x = square(4); // x gets the value 16
4, you could call it as follows:

Câu lệnh trước gọi hàm với đối số là

const factorial = function fac(n) {
  return n < 2 ? 1 : n * fac(n - 1);
}

console.log(factorial(3))
8. Hàm thực thi các câu lệnh của nó và trả về giá trị
const factorial = function fac(n) {
  return n < 2 ? 1 : n * fac(n - 1);
}

console.log(factorial(3))
9.

Các chức năng phải nằm trong phạm vi khi chúng được gọi, nhưng khai báo chức năng có thể được nâng lên (xuất hiện bên dưới cuộc gọi trong mã), như trong ví dụ này:

console.log(square(5));
// …
function square(n) {
  return n * n;
}

Phạm vi của một hàm là hàm trong đó nó được khai báo (hoặc toàn bộ chương trình, nếu nó được khai báo ở cấp cao nhất).

Lưu ý: Điều này chỉ hoạt động khi xác định hàm bằng cú pháp trên (nghĩa là,

function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}
0). Mã dưới đây sẽ không hoạt động. This works only when defining the function using the above syntax (i.e.,
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}
0). The code below will not work.

Điều này có nghĩa là chức năng nâng chỉ hoạt động với các khai báo chức năng không phải với các biểu thức chức năng.

function square(number) {
  return number * number;
}
0

Các đối số của một hàm không giới hạn ở các chuỗi và số. Bạn có thể chuyển toàn bộ đối tượng cho một chức năng. Hàm

function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}
1 (được xác định trong làm việc với các đối tượng) là một ví dụ về hàm lấy một đối tượng làm đối số.

Một chức năng có thể gọi chính nó. Ví dụ, đây là một chức năng tính toán các giai thừa một cách đệ quy:

function square(number) {
  return number * number;
}
1

Sau đó, bạn có thể tính toán các giai thừa của

function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}
2 đến
const factorial = function fac(n) {
  return n < 2 ? 1 : n * fac(n - 1);
}

console.log(factorial(3))
8 như sau:

function square(number) {
  return number * number;
}
2

Có nhiều cách khác để gọi các chức năng. Thường có các trường hợp một hàm cần được gọi là động hoặc số lượng đối số cho một hàm khác nhau hoặc trong đó bối cảnh của lệnh gọi hàm cần được đặt thành một đối tượng cụ thể được xác định trong thời gian chạy.

Nó chỉ ra rằng các chức năng là các đối tượng của chúng - và đến lượt nó, các đối tượng này có các phương thức. (Xem đối tượng

const factorial = function fac(n) {
  return n < 2 ? 1 : n * fac(n - 1);
}

console.log(factorial(3))
5.) Các phương thức
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}
5 và
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}
6 có thể được sử dụng để đạt được mục tiêu này.

Phạm vi chức năng

Các biến được xác định bên trong một hàm không thể được truy cập từ bất cứ nơi nào bên ngoài hàm, bởi vì biến chỉ được xác định trong phạm vi của hàm. Tuy nhiên, một hàm có thể truy cập tất cả các biến và hàm được xác định bên trong phạm vi mà nó được xác định.

Nói cách khác, một hàm được xác định trong phạm vi toàn cầu có thể truy cập tất cả các biến được xác định trong phạm vi toàn cầu. Một hàm được xác định bên trong một hàm khác cũng có thể truy cập tất cả các biến được xác định trong hàm cha của nó và bất kỳ biến nào khác mà hàm cha có quyền truy cập.

function square(number) {
  return number * number;
}
3

Phạm vi và ngăn xếp chức năng

Đệ quy

Một chức năng có thể tham khảo và gọi chính nó. Có ba cách để một chức năng đề cập đến chính nó:

  1. Tên của chức năng
  2. function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    7
  3. Một biến trong phạm vi đề cập đến chức năng

Ví dụ, hãy xem xét định nghĩa chức năng sau:

function square(number) {
  return number * number;
}
4

Trong cơ thể chức năng, sau đây đều tương đương:

  1. function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    8
  2. function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    9
  3. function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    0

Một hàm tự gọi được gọi là hàm đệ quy. Trong một số cách, đệ quy tương tự như một vòng lặp. Cả hai thực thi cùng một mã nhiều lần và cả hai đều yêu cầu một điều kiện (để tránh một vòng lặp vô hạn, hoặc đúng hơn là đệ quy vô hạn trong trường hợp này).

Ví dụ, hãy xem xét vòng lặp sau:

function square(number) {
  return number * number;
}
5

Nó có thể được chuyển đổi thành khai báo chức năng đệ quy, theo sau là một cuộc gọi đến chức năng đó:

function square(number) {
  return number * number;
}
6

Tuy nhiên, một số thuật toán không thể là các vòng lặp đơn giản. Ví dụ: nhận tất cả các nút của cấu trúc cây (như DOM) dễ dàng hơn thông qua đệ quy:

function square(number) {
  return number * number;
}
7

So với hàm

function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
1, mỗi cuộc gọi đệ quy thực hiện nhiều cuộc gọi đệ quy ở đây.

Có thể chuyển đổi bất kỳ thuật toán đệ quy nào thành một thuật toán không nhận được, nhưng logic thường phức tạp hơn nhiều và làm như vậy đòi hỏi phải sử dụng ngăn xếp.

Trong thực tế, việc đệ quy sử dụng một ngăn xếp: Chức năng ngăn xếp. Hành vi giống như ngăn xếp có thể được nhìn thấy trong ví dụ sau:

function square(number) {
  return number * number;
}
8

Các chức năng và đóng cửa lồng nhau

Bạn có thể làm tổ một chức năng trong một chức năng khác. Hàm lồng nhau (bên trong) là riêng tư cho hàm (bên ngoài) của nó.

Nó cũng tạo thành một đóng cửa. Đóng cửa là một biểu thức (phổ biến nhất là một hàm) có thể có các biến tự do cùng với một môi trường liên kết các biến đó ("đóng" biểu thức).

Vì một hàm lồng nhau là một đóng cửa, điều này có nghĩa là một hàm lồng nhau có thể "kế thừa" các đối số và biến của hàm chứa của nó. Nói cách khác, hàm bên trong chứa phạm vi của hàm bên ngoài.

Để tóm tắt:

  • Hàm bên trong chỉ có thể được truy cập từ các câu lệnh trong hàm bên ngoài.
  • Hàm bên trong tạo thành một đóng: hàm bên trong có thể sử dụng các đối số và biến của hàm bên ngoài, trong khi hàm bên ngoài không thể sử dụng các đối số và biến của hàm bên trong.

Ví dụ sau đây cho thấy các chức năng lồng nhau:

function square(number) {
  return number * number;
}
9

Vì hàm bên trong hình thành việc đóng, bạn có thể gọi hàm bên ngoài và chỉ định các đối số cho cả hàm bên ngoài và bên trong:

function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;
0

Bảo tồn các biến

Lưu ý cách

function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
2 được bảo tồn khi
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
3 được trả về. Một đóng cửa phải lưu giữ các đối số và biến trong tất cả các phạm vi tham chiếu. Vì mỗi cuộc gọi cung cấp các đối số có khả năng khác nhau, nên việc đóng cửa mới được tạo cho mỗi cuộc gọi đến
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
4. Bộ nhớ chỉ có thể được giải phóng khi
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
3 được trả về không còn có thể truy cập được.

Điều này không khác với việc lưu trữ các tài liệu tham khảo trong các đối tượng khác, nhưng thường ít rõ ràng hơn vì người ta không đặt các tài liệu tham khảo trực tiếp và không thể kiểm tra chúng.

Nhân các chức năng được lồng

Các chức năng có thể được nhân lên. Ví dụ:

  • Một hàm (
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    6) chứa hàm (
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    7), bản thân chứa hàm (
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    8).
  • Cả hai chức năng
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    7 và
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    8 đóng cửa biểu mẫu ở đây. Vì vậy,
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    7 có thể truy cập
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    6 và
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    8 có thể truy cập
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    7.
  • Ngoài ra, vì
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    8 có thể truy cập
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    7 có thể truy cập
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    6,
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    8 cũng có thể truy cập
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    6.

Do đó, việc đóng cửa có thể chứa nhiều phạm vi; Chúng đệ quy chứa phạm vi của các chức năng chứa nó. Đây được gọi là chuỗi phạm vi. (Lý do nó được gọi là "chuỗi" được giải thích sau.)

Xem xét ví dụ sau:

function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;
1

Trong ví dụ này,

function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
8 truy cập ________ 77's
console.log(square(5));
// …
function square(n) {
  return n * n;
}
2 và ________ 76's
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
2.

Điều này có thể được thực hiện bởi vì:

  1. function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    7 tạo thành một đóng cửa bao gồm
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    6 (nghĩa là,
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    7 có thể truy cập vào các đối số và biến của ____ 76).
  2. function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    8 tạo thành một đóng cửa bao gồm
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    7.
  3. Bởi vì việc đóng cửa của ____ 78 bao gồm đóng cửa
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    7 và ________ 77 bao gồm
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    6, nên việc đóng cửa của ____ 78 cũng bao gồm
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    6. Điều này có nghĩa là
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    8 có thể truy cập cả đối số và biến của
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    7 và ____ 76. Nói cách khác,
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    8 chuỗi phạm vi của
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    7 và
    function map(f, a) {
      const result = [];
      for (let i = 0; i < a.length; i++) {
        result[i] = f(a[i]);
      }
      return result;
    }
    
    const f = function (x) {
      return x * x * x;
    }
    
    const numbers = [0, 1, 2, 5, 10];
    const cube = map(f, numbers);
    console.log(cube);
    
    6, theo thứ tự đó.

Điều ngược lại, tuy nhiên, không đúng.

function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
6 không thể truy cập
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
8, vì
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
6 không thể truy cập bất kỳ đối số hoặc biến nào của
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
7, mà
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
8 là một biến của. Do đó,
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
8 vẫn riêng tư chỉ với
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
7.

Tên xung đột

Khi hai đối số hoặc biến trong phạm vi đóng có cùng tên, có một cuộc xung đột tên. Nhiều phạm vi lồng nhau được ưu tiên. Vì vậy, phạm vi trong cùng là ưu tiên cao nhất, trong khi phạm vi ngoài cùng chiếm thấp nhất. Đây là chuỗi phạm vi. Đầu tiên trong chuỗi là phạm vi trong cùng, và cuối cùng là phạm vi ngoài cùng. Xem xét những điều sau:

function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;
2

Xung đột tên xảy ra tại câu lệnh

function square(number) {
  return number * number;
}
20 và nằm giữa tham số của ____ 73
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
2 và biến của ________ 74
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
2. Chuỗi phạm vi ở đây là {
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
3,
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
4, đối tượng toàn cầu}. Do đó, ________ 73's
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
2 có mức độ ưu tiên so với ____ 74's
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
2 và
function square(number) {
  return number * number;
}
31 (____ 73's
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
2) được trả lại thay vì
function square(number) {
  return number * number;
}
34 (____ 74
function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}

const f = function (x) {
  return x * x * x;
}

const numbers = [0, 1, 2, 5, 10];
const cube = map(f, numbers);
console.log(cube);
2).

Đóng cửa

Đóng cửa là một trong những tính năng mạnh mẽ nhất của JavaScript. JavaScript cho phép làm tổ của các hàm và cấp cho hàm bên trong truy cập đầy đủ cho tất cả các biến và hàm được xác định bên trong hàm bên ngoài (và tất cả các biến và hàm khác mà hàm bên ngoài có quyền truy cập).

Tuy nhiên, hàm bên ngoài không có quyền truy cập vào các biến và hàm được xác định bên trong hàm bên trong. Điều này cung cấp một loại đóng gói cho các biến của hàm bên trong.

Ngoài ra, vì hàm bên trong có quyền truy cập vào phạm vi của hàm bên ngoài, các biến và hàm được xác định ở hàm bên ngoài sẽ sống lâu hơn thời gian thực hiện hàm bên ngoài, nếu hàm bên trong quản lý để tồn tại ngoài vòng đời của bên ngoài hàm số. Một đóng cửa được tạo ra khi hàm bên trong được cung cấp cho bất kỳ phạm vi nào bên ngoài hàm bên ngoài.

function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;
3

Nó có thể phức tạp hơn nhiều so với mã trên. Một đối tượng chứa các phương thức để thao tác các biến bên trong của hàm bên ngoài có thể được trả về.

function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;
4

Trong mã trên, biến

function square(number) {
  return number * number;
}
37 của hàm bên ngoài có thể truy cập được vào các hàm bên trong và không có cách nào khác để truy cập các biến bên trong ngoại trừ thông qua các hàm bên trong. Các biến bên trong của các hàm bên trong hoạt động như các cửa hàng an toàn cho các đối số và biến bên ngoài. Họ giữ dữ liệu "liên tục" và "đóng gói" cho các hàm bên trong hoạt động. Các chức năng thậm chí không phải được gán cho một biến hoặc có tên.

function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;
5

Lưu ý: Có một số cạm bẫy cần chú ý khi sử dụng đóng cửa! There are a number of pitfalls to watch out for when using closures!

Nếu một hàm kèm theo định nghĩa một biến có cùng tên với một biến trong phạm vi bên ngoài, thì không có cách nào để tham khảo biến trong phạm vi bên ngoài một lần nữa. .

function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;
6

Sử dụng đối tượng đối số

Các đối số của một hàm được duy trì trong một đối tượng giống như mảng. Trong một chức năng, bạn có thể giải quyết các đối số được truyền cho nó như sau:

trong đó

function square(number) {
  return number * number;
}
38 là số thứ tự của đối số, bắt đầu từ
const factorial = function fac(n) {
  return n < 2 ? 1 : n * fac(n - 1);
}

console.log(factorial(3))
4. Vì vậy, đối số đầu tiên được truyền cho một hàm sẽ là
function square(number) {
  return number * number;
}
40. Tổng số đối số được biểu thị bằng
function square(number) {
  return number * number;
}
41.

Sử dụng đối tượng

function square(number) {
  return number * number;
}
42, bạn có thể gọi một hàm có nhiều đối số hơn là chính thức được tuyên bố chấp nhận. Điều này thường hữu ích nếu bạn không biết trước có bao nhiêu đối số sẽ được chuyển cho chức năng. Bạn có thể sử dụng
function square(number) {
  return number * number;
}
41 để xác định số lượng đối số thực sự được truyền vào hàm và sau đó truy cập mỗi đối số bằng đối tượng
function square(number) {
  return number * number;
}
42.

Ví dụ, hãy xem xét một chức năng kết hợp một số chuỗi. Đối số chính thức duy nhất cho hàm là một chuỗi chỉ định các ký tự tách các mục thành Concatenate. Hàm được định nghĩa như sau:

function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;
7

Bạn có thể chuyển bất kỳ số lượng đối số nào cho hàm này và nó kết hợp từng đối số thành một chuỗi "danh sách":

function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;
8

Lưu ý: Biến

function square(number) {
  return number * number;
}
42 là "giống như mảng", nhưng không phải là một mảng. Nó giống như mảng ở chỗ nó có chỉ số được đánh số và thuộc tính
function square(number) {
  return number * number;
}
46. Tuy nhiên, nó không sở hữu tất cả các phương pháp điều khiển mảng.
The
function square(number) {
  return number * number;
}
42 variable is "array-like", but not an array. It is array-like in that it has a numbered index and a
function square(number) {
  return number * number;
}
46 property. However, it does not possess all of the array-manipulation methods.

Xem đối tượng

const factorial = function fac(n) {
  return n < 2 ? 1 : n * fac(n - 1);
}

console.log(factorial(3))
5 trong tham chiếu JavaScript để biết thêm thông tin.

Tham số chức năng

Có hai loại cú pháp tham số đặc biệt: tham số mặc định và tham số REST.

Tham số mặc định

Trong JavaScript, các tham số của các hàm mặc định là

function square(number) {
  return number * number;
}
48. Tuy nhiên, trong một số tình huống có thể hữu ích để đặt một giá trị mặc định khác. Đây chính xác là những gì tham số mặc định làm.

Trước đây, chiến lược chung để thiết lập mặc định là kiểm tra các giá trị tham số trong phần thân của hàm và gán một giá trị nếu chúng là

function square(number) {
  return number * number;
}
48.

Trong ví dụ sau, nếu không có giá trị nào được cung cấp cho

function square(number) {
  return number * number;
}
50, giá trị của nó sẽ là
function square(number) {
  return number * number;
}
48 khi đánh giá
function square(number) {
  return number * number;
}
52 và một cuộc gọi đến
function square(number) {
  return number * number;
}
53 thường sẽ trả lại
function square(number) {
  return number * number;
}
54. Tuy nhiên, điều này được ngăn chặn bởi dòng thứ hai trong ví dụ này:

function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;
9

Với các tham số mặc định, kiểm tra thủ công trong thân chức năng không còn cần thiết nữa. Bạn có thể đặt

function map(f, a) {
  const result = [];
  for (let i = 0; i < a.length; i++) {
    result[i] = f(a[i]);
  }
  return result;
}
2 làm giá trị mặc định cho
function square(number) {
  return number * number;
}
50 trong đầu hàm:

function myFunc(theArr) {
  theArr[0] = 30;
}

const arr = [45];

console.log(arr[0]); // 45
myFunc(arr);
console.log(arr[0]); // 30
0

Để biết thêm chi tiết, hãy xem các tham số mặc định trong tham chiếu.

Tham số nghỉ

Cú pháp tham số REST cho phép chúng tôi biểu diễn một số lượng đối số không xác định dưới dạng một mảng.

Trong ví dụ sau, hàm

function square(number) {
  return number * number;
}
53 sử dụng các tham số REST để thu thập các đối số từ cái thứ hai đến cuối. Chức năng sau đó nhân lên những điều này với đối số đầu tiên.

function myFunc(theArr) {
  theArr[0] = 30;
}

const arr = [45];

console.log(arr[0]); // 45
myFunc(arr);
console.log(arr[0]); // 30
1

Hàm mũi tên

Một biểu thức hàm mũi tên (còn được gọi là mũi tên chất béo để phân biệt với cú pháp giả thuyết

function square(number) {
  return number * number;
}
58 trong JavaScript trong tương lai) có cú pháp ngắn hơn so với biểu thức chức năng và không có
function square(number) {
  return number * number;
}
59,
function square(number) {
  return number * number;
}
42,
function square(number) {
  return number * number;
}
61 hoặc ____. Các hàm mũi tên luôn ẩn danh.

Hai yếu tố ảnh hưởng đến việc giới thiệu các hàm mũi tên: các chức năng ngắn hơn và không ràng buộc của

function square(number) {
  return number * number;
}
59.

Chức năng ngắn hơn

Trong một số mẫu chức năng, các chức năng ngắn hơn được chào đón. So sánh:

function myFunc(theArr) {
  theArr[0] = 30;
}

const arr = [45];

console.log(arr[0]); // 45
myFunc(arr);
console.log(arr[0]); // 30
2

Không tách biệt điều này

Cho đến khi các chức năng mũi tên, mọi hàm mới đã xác định giá trị

function square(number) {
  return number * number;
}
59 của chính nó (một đối tượng mới trong trường hợp hàm tạo, không xác định trong các gọi hàm chế độ nghiêm ngặt, đối tượng cơ sở nếu hàm được gọi là "phương thức đối tượng", v.v.). Điều này đã được chứng minh là ít hơn lý tưởng với một phong cách lập trình hướng đối tượng.

function myFunc(theArr) {
  theArr[0] = 30;
}

const arr = [45];

console.log(arr[0]); // 45
myFunc(arr);
console.log(arr[0]); // 30
3

Trong Ecmascript 3/5, vấn đề này đã được khắc phục bằng cách gán giá trị trong

function square(number) {
  return number * number;
}
59 cho một biến có thể được đóng lại.

function myFunc(theArr) {
  theArr[0] = 30;
}

const arr = [45];

console.log(arr[0]); // 45
myFunc(arr);
console.log(arr[0]); // 30
4

Ngoài ra, một hàm ràng buộc có thể được tạo ra để giá trị

function square(number) {
  return number * number;
}
59 thích hợp sẽ được chuyển đến hàm
function square(number) {
  return number * number;
}
67.

Một hàm mũi tên không có

function square(number) {
  return number * number;
}
59 riêng; Giá trị
function square(number) {
  return number * number;
}
59 của bối cảnh thực thi kèm theo được sử dụng. Do đó, trong mã sau,
function square(number) {
  return number * number;
}
59 trong hàm được truyền đến
function square(number) {
  return number * number;
}
71 có cùng giá trị với
function square(number) {
  return number * number;
}
59 trong hàm kèm theo:

function myFunc(theArr) {
  theArr[0] = 30;
}

const arr = [45];

console.log(arr[0]); // 45
myFunc(arr);
console.log(arr[0]); // 30
5

Các chức năng được xác định trước

JavaScript có một số chức năng tích hợp, cấp cao nhất:

const factorial = function fac(n) {
  return n < 2 ? 1 : n * fac(n - 1);
}

console.log(factorial(3))
6

Phương thức

const factorial = function fac(n) {
  return n < 2 ? 1 : n * fac(n - 1);
}

console.log(factorial(3))
6 đánh giá mã JavaScript được biểu thị dưới dạng chuỗi.
const factorial = function fac(n) {
  return n < 2 ? 1 : n * fac(n - 1);
}

console.log(factorial(3))
6
method evaluates JavaScript code represented as a string.

function square(number) {
  return number * number;
}
75

Hàm

function square(number) {
  return number * number;
}
75 toàn cầu xác định liệu giá trị được truyền có phải là số hữu hạn hay không. Nếu cần, tham số trước tiên được chuyển đổi thành một số.
function square(number) {
  return number * number;
}
75
function determines whether the passed value is a finite number. If needed, the parameter is first converted to a number.

function square(number) {
  return number * number;
}
77

Hàm

function square(number) {
  return number * number;
}
77 xác định xem một giá trị có phải là
function square(number) {
  return number * number;
}
54 hay không. Lưu ý: Sự ép buộc bên trong hàm
function square(number) {
  return number * number;
}
80 có các quy tắc thú vị; Bạn có thể muốn sử dụng
function square(number) {
  return number * number;
}
81 để xác định xem giá trị không phải là một số.
function square(number) {
  return number * number;
}
77
function determines whether a value is
function square(number) {
  return number * number;
}
54 or not. Note: coercion inside the
function square(number) {
  return number * number;
}
80 function has interesting rules; you may alternatively want to use
function square(number) {
  return number * number;
}
81 to determine if the value is Not-A-Number.

function square(number) {
  return number * number;
}
82

Hàm

function square(number) {
  return number * number;
}
82 phân tích đối số chuỗi và trả về số điểm nổi.
function square(number) {
  return number * number;
}
82
function parses a string argument and returns a floating point number.

function square(number) {
  return number * number;
}
84

Hàm

function square(number) {
  return number * number;
}
84 phân tích đối số chuỗi và trả về một số nguyên của radix được chỉ định (cơ sở trong các hệ thống số toán học).
function square(number) {
  return number * number;
}
84
function parses a string argument and returns an integer of the specified radix (the base in mathematical numeral systems).

function square(number) {
  return number * number;
}
86

Hàm

function square(number) {
  return number * number;
}
86 giải mã một định danh tài nguyên thống nhất (URI) được tạo trước đây bởi
function square(number) {
  return number * number;
}
88 hoặc bằng một thói quen tương tự.
function square(number) {
  return number * number;
}
86
function decodes a Uniform Resource Identifier (URI) previously created by
function square(number) {
  return number * number;
}
88 or by a similar routine.

function square(number) {
  return number * number;
}
89

Phương pháp

function square(number) {
  return number * number;
}
89 giải mã một thành phần Định danh tài nguyên đồng đều (URI) được tạo trước đây bởi
function square(number) {
  return number * number;
}
91 hoặc bằng một thói quen tương tự.
function square(number) {
  return number * number;
}
89
method decodes a Uniform Resource Identifier (URI) component previously created by
function square(number) {
  return number * number;
}
91 or by a similar routine.

function square(number) {
  return number * number;
}
92

Phương pháp

function square(number) {
  return number * number;
}
92 mã hóa một định danh tài nguyên thống nhất (URI) bằng cách thay thế từng phiên bản của một số ký tự nhất định bằng một, hai, ba hoặc bốn chuỗi thoát đại diện cho mã hóa UTF-8 của ký tự (sẽ chỉ là bốn chuỗi thoát cho hai các ký tự "thay thế").
function square(number) {
  return number * number;
}
92
method encodes a Uniform Resource Identifier (URI) by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character (will only be four escape sequences for characters composed of two "surrogate" characters).

function square(number) {
  return number * number;
}
94

Phương thức

function square(number) {
  return number * number;
}
94 mã hóa thành phần Định danh tài nguyên (URI) đồng đều bằng cách thay thế từng phiên bản của một số ký tự nhất định bằng một, hai, ba hoặc bốn chuỗi thoát đại diện cho mã hóa UTF-8 của ký tự (sẽ chỉ là bốn chuỗi thoát cho các ký tự bao gồm hai ký tự "thay thế").
function square(number) {
  return number * number;
}
94
method encodes a Uniform Resource Identifier (URI) component by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character (will only be four escape sequences for characters composed of two "surrogate" characters).

function square(number) {
  return number * number;
}
96

Phương pháp

function square(number) {
  return number * number;
}
96 không dùng tính tính toán một chuỗi mới trong đó một số ký tự đã được thay thế bằng chuỗi thoát thập lục phân. Thay vào đó, sử dụng
function square(number) {
  return number * number;
}
88 hoặc
function square(number) {
  return number * number;
}
91.
function square(number) {
  return number * number;
}
96
method computes a new string in which certain characters have been replaced by a hexadecimal escape sequence. Use
function square(number) {
  return number * number;
}
88 or
function square(number) {
  return number * number;
}
91 instead.

function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;
00

Phương pháp

function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;
00 không dùng tính tính toán một chuỗi mới trong đó các chuỗi thoát thập lục phân được thay thế bằng ký tự mà nó đại diện. Các chuỗi thoát có thể được giới thiệu bởi một chức năng như
function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;
02. Vì
function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;
00 không được dùng để sử dụng
function square(number) {
  return number * number;
}
86 hoặc
function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;
05 thay thế.
function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;
00
method computes a new string in which hexadecimal escape sequences are replaced with the character that it represents. The escape sequences might be introduced by a function like
function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;
02. Because
function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;
00 is deprecated, use
function square(number) {
  return number * number;
}
86 or
function myFunc(theObject) {
  theObject.make = 'Toyota';
}

const mycar = {
  make: 'Honda',
  model: 'Accord',
  year: 1998,
};

// x gets the value "Honda"
const x = mycar.make;

// the make property is changed by the function
myFunc(mycar);
// y gets the value "Toyota"
const y = mycar.make;
05 instead.

  • " Trước
  • Tiếp theo "

Chức năng chính trong JavaScript là gì?

Hàm JavaScript là một khối mã được thiết kế để thực hiện một nhiệm vụ cụ thể. Một hàm JavaScript được thực thi khi "một cái gì đó" gọi nó (gọi nó).

Các loại chức năng trong JavaScript là gì?

Có 3 cách viết một chức năng trong JavaScript: Tuyên bố chức năng.Biểu thức chức năng.Hàm mũi tên.Function Declaration. Function Expression. Arrow Function.

Hàm JavaScript giải thích với ví dụ là gì?

Trong JavaScript, các chức năng cũng có thể được định nghĩa là biểu thức.Ví dụ: // chương trình để tìm hình vuông của hàm số // được khai báo bên trong biến LET x = function (num) {return num * num};Console.log (x (4));// có thể được sử dụng làm giá trị biến cho các biến khác, hãy để y = x (3);Console.log (y);Mã vận hành.functions can also be defined as expressions. For example, // program to find the square of a number // function is declared inside the variable let x = function (num) { return num * num }; console.log(x(4)); // can be used as variable value for other variables let y = x(3); console.log(y); Run Code.

Tại sao chức năng JavaScript lại quan trọng?

Sự khác biệt chính giữa JavaScript và hầu hết các ngôn ngữ khác là JavaScript cho phép chúng ta tạo một hàm như một thực thể độc lập và chuyển nó như một đối số cho một phương thức, có thể chấp nhận nó như một tham số, giống như bất kỳ đối tượng nào khácloại hình.JavaScript allows us to create a function as a stand alone entity, and to pass it as an argument to a method, which can accept it as a parameter, just as we can any other object type.