Hàm lồng nhau không được xác định JavaScript

Các hàm lồng trong JavaScript là các loại hàm được xác định trong một hàm khác. Một hoặc nhiều chức năng có thể được thêm vào bên trong một chức năng và phạm vi của các chức năng bên ngoài bao gồm các chức năng lồng nhau hoặc bên trong này. Các hàm bên ngoài còn được gọi là các hàm Cha và các hàm bên trong có thể được đặt tên là các hàm Con trong các hàm lồng nhau của JavaScript. Các biến và tham số của hàm cha có thể truy cập được đối với hàm con, trong khi hàm cha không thể truy cập các biến được khai báo bên trong các hàm con

Bài viết này đã thảo luận về Hàm lồng nhau trong JavaScript. Ngoài ra, chúng tôi cũng đã giải thích phạm vi biến, Tham số và câu lệnh trả về của các hàm lồng nhau với sự trợ giúp của các ví dụ

Các hàm lồng nhau trong JavaScript

Trong JavaScript, một hàm lồng nhau là một hàm được xác định bên trong hoặc bên trong một hàm khác. Quy trình tạo hàm lồng cũng giống như quy trình tạo hàm bình thường, nhưng để tạo hàm lồng, chúng ta phải xác định hàm mới hoặc hàm con bên trong hàm cha

Đây là cú pháp của JavaScript Nested functions

Hàm Hàm cha ()//định nghĩa hàm<
{
Function childFunction()//function definition
{
//body of the child function
}
childFunction();// child function calling
}
parentFunction();//parent function calling

Như bạn có thể thấy từ cú pháp, chúng ta phải định nghĩa hàm con() trong hàm cha mẹ(). Ngoài ra, khi chúng ta muốn gọi hàm con(), chúng ta phải gọi nó trong phần thân của hàm cha mẹ()

Ví dụ. Sử dụng các hàm lồng nhau trong JavaScript

Ví dụ này sẽ chỉ cho bạn cách tạo các hàm JavaScript lồng nhau. Với mục đích này, chúng ta sẽ định nghĩa một hàm cha có tên là “addNum()”, hàm này có hai tham số là “x” và “y”. Sau khi làm như vậy, chúng ta sẽ tạo một hàm con “showMessage()” để in một tin nhắn văn bản ra cửa sổ giao diện điều khiển

function addNum ( x ,y)
{
  //nested function
  function showMessage(text)
  {
  console.log( văn bản );
  }
  let sum=x+y;
  //invoking the nested function
  showMessage("sum is "+ sum)
}

Lưu ý rằng chúng ta đã gọi hàm “showMessage()” bên trong định nghĩa hàm của hàm “addNum()”. Trong bước tiếp theo, chúng ta sẽ gọi hàm cha addNum() trong khi truyền “5” và “6” làm đối số

addNum (5,6)

Như bạn có thể thấy từ đầu ra, chúng ta đã thực hiện thành công các hàm lồng nhau trong ví dụ của mình

Hàm lồng nhau không được xác định JavaScript

Phạm vi biến của Hàm lồng nhau trong JavaScript

Bây giờ, hãy nói về phạm vi của các hàm lồng nhau trong JavaScript. Các chức năng lồng nhau có phạm vi riêng của chúng; . Bạn nên ghi nhớ hai điểm về phạm vi biến của các hàm lồng trong JavaScript. Một hàm lồng nhau là riêng tư đối với hàm mẹ của nó và một hàm lồng nhau có quyền truy cập vào phạm vi của hàm mẹ

Chúng tôi sẽ giải thích từng câu đã cho với sự trợ giúp của các ví dụ

Như chúng tôi đã nói, hàm lồng nhau được coi là “riêng tư” đối với hàm chứa định nghĩa của nó. Điều đó có nghĩa là chỉ hàm cha hoặc hàm chứa mới có thể truy cập hàm lồng nhau và bạn sẽ không được phép truy cập nó bên ngoài hàm đã chỉ định. Điều này xảy ra bởi vì chúng tôi đã xác định chức năng bên trong bên trong phạm vi chức năng bên ngoài

Chẳng hạn, chúng ta đã định nghĩa một hàm bên ngoài “AddNumber()” trong mã được cung cấp bên dưới và sau đó thêm hàm bên trong “showMessage()” vào trong định nghĩa của hàm bên ngoài

hàm addNumber ( x ,y)
{

  function showMessage(text)
  {
    console.log( văn bản );
  }

  let sum=x+y;
showMessage("sum is " + sum)
}

Bây giờ, khi chúng ta cố gắng truy cập hàm bên trong “showMessage()” bên ngoài phạm vi của nó, nó sẽ đưa ra lỗi “Uncaught ReferenceError”

showMessage ('20');

Hàm lồng nhau không được xác định JavaScript

Tất cả các hàm, biến và đối số được xác định trong hàm bên ngoài đều có thể truy cập được đối với hàm lồng nhau đã tạo. Khả năng này được gọi là “Phạm vi từ vựng”, trong đó hàm bên trong có thể truy cập phạm vi của hàm gốc hoặc hàm bên ngoài

Chúng tôi sẽ không chuyển bất kỳ đối số nào cho hàm bên trong showMessage() của chúng tôi trong ví dụ dưới đây. Những gì chúng ta sẽ làm là sử dụng các đối số “x” và “y” của hàm ngoài “addNumber()” và biến “sum”

hàm addNumber ( x ,y)
{

  function showMessage()
  {
    console.log( `tổng của %d + %d is %d`,x ,y,sum);
  }

  let sum=x+y;
  showMessage()
}

Bây giờ, chúng ta sẽ gọi hàm bên ngoài “AddNumber()” và chuyển “4” và “6” làm đối số

addNumber (4,6)

Hãy xem kết quả được cung cấp bên dưới, điều này biểu thị rằng chúng ta đã truy cập thành công biến “sum”, đối số “x” và “y” của hàm bên ngoài addNumber trong hàm showMessage()

Hàm lồng nhau không được xác định JavaScript

Trả về một hàm lồng JavaScript

Hàm bên ngoài có khả năng trả về hàm lồng nhau. Chẳng hạn, trong ví dụ dưới đây, hàm displayCounter() có một biến “đếm” và trả về hàm bên trong increment()

function displayCounter () {
  let count = 0;

  increment = function () {
    return ++count;
  };

  return increment;
}

Chúng tôi sẽ lưu trữ chức năng displayCounter() trong “bộ đếm” trong bước tiếp theo. Bây giờ, khái niệm chúng ta cần thảo luận ở đây là hàm “increment()” vẫn sẽ có quyền truy cập vào thuộc tính “count” của hàm “displayCounter()” khi displayCounter() hoàn thành việc thực thi. “Đóng cửa”, một tính năng của JavaScript, giúp điều này trở nên khả thi

Ở đây, thuộc tính “count” là cục bộ của hàm “displayCounter()”, tuy nhiên, hàm “increment” đã xác định cũng có thể truy cập nó vì nó được lồng bên trong hàm “displayCounter()”

bộ đếm = bộ đếm hiển thị ()

Đoạn mã trên sẽ gọi hàm “displayCounter()”. Sau đó, hàm displayCounter() trước tiên sẽ khởi tạo biến “count” thành giá trị “0” và sau đó trả về hàm “increment()”. Vì thuộc tính “count” không bị hủy nên khi chúng ta gọi hàm gia tăng thông qua “counter()” thì mỗi lần thuộc tính “count” sẽ được tăng lên theo đoạn mã được thêm vào

bảng điều khiển. log( bộ đếm () . );
console.log( bộ đếm () . );
console.log( bộ đếm ());

Kiểm tra đầu ra dưới đây của ví dụ được cung cấp

Hàm lồng nhau không được xác định JavaScript

Các tham số của các hàm lồng nhau trong JavaScript

Hàm bên trong cũng có thể nhận đối số. Chẳng hạn, trong ví dụ sau, “hàm bên trong ()” được trả về bởi “hàm bên ngoài ()” và mỗi hàm trong số chúng chấp nhận một bộ đối số

hàm hàm ngoài ( x ) {

  innerFunction = function (y) {
    console.log("x %d  y %d",x,y)
  };

  return innerFunction;
}

Để có được hàm bên trong (), chúng ta sẽ thêm đoạn mã sau vào chương trình JavaScript của mình trong khi chuyển “3” làm đối số cho hàm bên ngoài ()

Hàm bên trong = Hàm ngoài (3);

Sau đó, chúng ta sẽ gọi hàm innerFunction() với giá trị “7” làm đối số

Hàm bên trong (7);

Bạn cũng có thể chuyển đối số cho cả hàm bên ngoài và bên trong cùng một lúc

chức năng bên ngoài (2)(3);

Cả hai dòng mã được chỉ định đều gọi hàm bên trong () và xuất các đối số đã truyền

Hàm lồng nhau không được xác định JavaScript

Phần kết luận

JavaScript cho phép bạn sử dụng các hàm lồng nhau trong chương trình mà không gặp lỗi. Hàm con hoặc hàm bên trong có thể được thêm vào bên trong hàm bên ngoài trong JavaScript. Tất cả các biến cục bộ, toàn cục của hàm bên ngoài đều có thể truy cập được đối với hàm bên trong. Trong trường hợp của hàm bên ngoài, chỉ có thể truy cập các giá trị thuộc tính toàn cầu cũng như các phương thức và biến được xác định trong các hàm cha. Bài viết này đã thảo luận về Hàm lồng nhau trong JavaScript. Ngoài ra, chúng tôi cũng đã giải thích phạm vi biến, thuộc tính Đóng, Phạm vi từ vựng, Tham số và câu lệnh trả về của các hàm lồng nhau trong JavaScript, với sự trợ giúp của các ví dụ

Chức năng lồng nhau có được phép trong JavaScript không?

JavaScript cho phép lồng các hàm và cấp cho hàm bên trong toàn quyền truy cập vào 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 .

Làm cách nào để sử dụng hàm lồng nhau trong JavaScript?

Các hàm lồng nhau trong JavaScript. .
Viết một hàm bên trong một hàm khác
Thực hiện cuộc gọi đến hàm bên trong trong câu lệnh trả về của hàm bên ngoài
Gọi nó là fun(a)(b) trong đó a là tham số của hàm ngoài và b là hàm trong
Cuối cùng trả về đầu ra kết hợp từ hàm lồng nhau

Tại sao chức năng JavaScript của tôi không được xác định?

Một biến chưa được gán giá trị là kiểu không xác định. Một phương thức hoặc câu lệnh cũng trả về không xác định nếu biến đang được đánh giá không có giá trị được gán. Hàm trả về giá trị không xác định nếu giá trị không được trả về .

Các định nghĩa hàm có thể được lồng vào nhau không?

Chúng ta có thể khai báo một hàm bên trong một hàm, nhưng đó không phải là hàm lồng nhau . Vì các định nghĩa hàm lồng nhau không thể truy cập các biến cục bộ của các khối xung quanh, chúng chỉ có thể truy cập các biến toàn cục của mô-đun chứa.