Chức năng vượt qua javascript làm tham số mà không cần gọi

Ví dụ. Chức năng như tham số

// program to pass a function as a parameter

function greet() {
    return 'Hello';
}

// passing function greet() as a parameter
function name(user, func)
{

    // accessing passed function
    const message = func();

    console.log(`${message} ${user}`);
}

name('John', greet);
name('Jack', greet);
name('Sara', greet);

đầu ra

Hello John
Hello Jack
Hello Sara

Trong chương trình trên có hai hàm.

function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
0 và
function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
1

  • Hàm
    function multiply(a, b) {
      return a * b;
    }
    
    multiply(5, 2); // 10
    multiply(5); // NaN !
    
    0 nhận hai tham số
  • Hàm
    function multiply(a, b) {
      return a * b;
    }
    
    multiply(5, 2); // 10
    multiply(5); // NaN !
    
    1 được truyền dưới dạng đối số cho hàm
    function multiply(a, b) {
      return a * b;
    }
    
    multiply(5, 2); // 10
    multiply(5); // NaN !
    
    0

Các tham số chức năng mặc định cho phép các tham số đã đặt tên được khởi tạo với các giá trị mặc định nếu không có giá trị nào hoặc

function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
3 được truyền

function fnName(param1 = defaultValue1, /* … ,*/ paramN = defaultValueN) {
  // …
}

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

function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
3. Tuy nhiên, thường hữu ích khi đặt một giá trị mặc định khác. Đây là nơi các tham số mặc định có thể giúp ích

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

function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
5 khi
function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
6 được gọi, thì giá trị của
function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
5 sẽ là
function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
3 khi đánh giá
function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
9 và
function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
6 sẽ trả về
Hello John
Hello Jack
Hello Sara
11

function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !

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

function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
3. Trong ví dụ sau,
function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
5 được đặt thành
Hello John
Hello Jack
Hello Sara
14 nếu
function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
6 được gọi chỉ với một đối số

Hello John
Hello Jack
Hello Sara
1

Với các tham số mặc định, việc kiểm tra trong thân hàm không còn cần thiết nữa. Bây giờ, bạn có thể gán

Hello John
Hello Jack
Hello Sara
14 làm giá trị mặc định cho
function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
5 trong hàm head

function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
0

Các tham số vẫn được đặt từ trái sang phải, ghi đè các tham số mặc định ngay cả khi có các tham số sau này không có giá trị mặc định

function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
1

Ghi chú. Các tham số sau tham số mặc định đầu tiên sẽ không đóng góp vào hàm

Hello John
Hello Jack
Hello Sara
18

Trình khởi tạo tham số mặc định sống trong phạm vi riêng của chúng, là cha của phạm vi được tạo cho thân hàm

Điều này có nghĩa là các tham số trước đó có thể được tham chiếu trong phần khởi tạo của các tham số sau này. Tuy nhiên, các hàm và biến được khai báo trong thân hàm không thể được tham chiếu từ các bộ khởi tạo tham số giá trị mặc định; . Điều này cũng bao gồm các biến được khai báo

function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
00 trong thân hàm

Ví dụ: hàm sau sẽ đưa ra một giá trị

Hello John
Hello Jack
Hello Sara
19 khi được gọi, vì giá trị tham số mặc định không có quyền truy cập vào phạm vi con của thân hàm

function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
6

Hàm này sẽ in giá trị của tham số

function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
02, vì biến
function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
03 chỉ được nâng lên đầu phạm vi được tạo cho thân hàm, không phải phạm vi cha được tạo cho danh sách tham số, vì vậy giá trị của nó không hiển thị với
function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
5

function fnName(param1 = defaultValue1, /* … ,*/ paramN = defaultValueN) {
  // …
}
0

Trong lệnh gọi thứ hai trong ví dụ này, ngay cả khi đối số đầu tiên được đặt rõ ràng thành

function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
3 (mặc dù không phải là
function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
06 hoặc các giá trị giả khác), giá trị của đối số
function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
07 vẫn là giá trị mặc định

function fnName(param1 = defaultValue1, /* … ,*/ paramN = defaultValueN) {
  // …
}
4

Đối số mặc định được đánh giá tại thời điểm gọi. Không giống như Python (ví dụ), một đối tượng mới được tạo mỗi khi hàm được gọi

function fnName(param1 = defaultValue1, /* … ,*/ paramN = defaultValueN) {
  // …
}
5

Điều này thậm chí áp dụng cho các hàm và biến

function fnName(param1 = defaultValue1, /* … ,*/ paramN = defaultValueN) {
  // …
}
6

Các tham số được xác định trước đó (ở bên trái) có sẵn cho các tham số mặc định sau này

function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
0

Chức năng này có thể được tính gần đúng như thế này, điều này cho thấy có bao nhiêu trường hợp cạnh được xử lý

function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
1

Bạn có thể sử dụng phép gán giá trị mặc định với cú pháp gán phá hủy

Một cách phổ biến để làm điều đó là đặt một đối tượng/mảng trống làm giá trị mặc định cho tham số bị hủy cấu trúc; .

function multiply(a, b) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5); // NaN !
08. Điều này giúp có thể không chuyển gì cho hàm mà vẫn có các giá trị đó được điền sẵn

Làm cách nào để chuyển một tham số trong hàm JavaScript mà không gọi nó?

Thử sử dụng bind(). .
tham số phương thức đầu tiên của bạn được chuyển thành tham số thứ hai trong liên kết,
tham số phương thức thứ hai của bạn được chuyển thành tham số thứ ba trong liên kết,

Bạn có thể chuyển một hàm dưới dạng tham số JavaScript không?

Việc truyền một hàm làm đối số cho hàm khá giống với việc truyền biến làm đối số cho hàm . vì vậy các biến có thể được trả về từ một hàm. Các ví dụ dưới đây mô tả việc truyền một hàm dưới dạng tham số cho một hàm khác.

Bạn có thể sử dụng một hàm làm tham số của một hàm khác không?

Bạn có thể sử dụng các núm điều khiển hàm làm đối số đầu vào cho các hàm khác , được gọi là các hàm chức năng. Các hàm này đánh giá các biểu thức toán học trên một phạm vi giá trị.

Làm cách nào để chuyển giá trị biến từ hàm này sang hàm khác trong JavaScript?

Khi có nhiều chức năng (hầu hết thời gian), cần có một cách để truyền dữ liệu giữa các chức năng. Điều này được thực hiện bằng cách chuyển các giá trị trong ngoặc đơn. myFunction(myData) . Ngay cả khi không có dữ liệu nào được truyền vào, chúng ta vẫn phải khai báo và thực thi các hàm bằng cách sử dụng dấu ngoặc đơn. myFunction().