Hướng dẫn how do you write a nested function in javascript? - làm thế nào để bạn viết một hàm lồng nhau trong javascript?

Các chức năng lồng nhau có thể là cơ sở để viết một nhóm mô-đun gồm các chức năng liên quan, loại nửa để lập trình hướng đối tượng đầy đủ (chỉ các lớp tĩnh).

Dưới đây là một ví dụ về một nhóm các chức năng như vậy, trong trường hợp này để chuyển đổi giá trị thành chuỗi JSON hoặc chuỗi JSON thành một giá trị.

Lưu ý cách các hàm bên trong được nhóm thành một đối tượng bên trong hàm bên ngoài và cách thức đối tượng được lưu trữ vào một tên nhóm. Đây là tên duy nhất có thể nhìn thấy trực tiếp từ bên ngoài nhóm. Để đạt được bất kỳ chức năng chứa nào từ bên ngoài, bạn chỉ cần viết tên nhóm, một khoảng thời gian, sau đó là tên hàm. Để đạt được một hàm chứa từ bên trong, bạn có thể sử dụng cùng một ký hiệu hoặc 'cái này', một khoảng thời gian, sau đó là tên hàm.

//--------------------------------------------------------------------//
//      Module J:
//          Convert from and to JSON strings
//--------------------------------------------------------------------//
const J=NewJ();
function NewJ()
    {
    const mod=
        {
        From:(str)=>
            {
            return JSON.parse(str);
            }, // From
        To:(val)=>
            {
            return JSON.stringify(val,null,3);
            } // To
        }; // mod
    return mod;
    } // NewJ

//--------------------------------------------------------------------//
//      End Module J
//--------------------------------------------------------------------//

Đây là một bài kiểm tra:

console.log(J.To({A:'a'}));

Đầu ra bảng điều khiển:

{
   "A": "a"
}

Các chức năng lồng nhau của JavaScript là các loại chức năng được xác định trong một chức năng khác. Một hoặc nhiều chức năng có thể được thêm vào bên trong một hàm và phạm vi của các hàm bên ngoài bao gồm các hàm lồng hoặc bên trong này. Các hàm bên ngoài cũng đượ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 vào 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ề các chức năng lồng nhau của JavaScript. Hơn nữa, chúng tôi cũng đã giải thích phạm vi thay đổi, 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ụ.

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

Dưới đây là cú pháp của các chức năng lồng nhau JavaScript:syntax of JavaScript Nested functions:

Function ParentFunction () // Định nghĩa chức năng {function childfunction () // định nghĩa chức năng {// cơ thể của hàm con parentFunction()//function definition
{
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 xác định ChildFunction () trong ParentFunction (). Ngoài ra, khi chúng tôi muốn gọi Childfunf (), chúng tôi phải gọi nó trong phần thân của ParentFunction ().

Ví dụ: Sử dụng các chức năng lồng nhau của JavaScript

Ví dụ này sẽ chỉ cho bạn cách tạo các chức năng lồng nhau của JavaScript. Với mục đích này, chúng tôi sẽ xác định một hàm cha có tên là add addnum (), có hai tham số, có nghĩa là X X và Y. Sau khi làm như vậy, chúng tôi sẽ tạo một hàm con, Show ShowMessage (), in ra một tin nhắn văn bản vào cửa sổ bảng điều khiển:addNum()”, which has two parameters, “x” and “y”. After doing so, we will create a child function “showMessage()” which prints out a text message to the console window:

hàm addnum (x, y) {& nbsp; // chức năng lồng nhau & nbsp; Chức năng ShowMessage (Văn bản) & NBSP; {& nbsp; Console.log (văn bản); & nbsp; } & nbsp; Đặt sum = x+y; & nbsp; // gọi chức năng lồng nhau & nbsp; showMessage ("sum is"+ sum)} addNum(x,y)
{
  //nested function
  function showMessage(text)
  {
  console.log(text);
  }
  let sum=x+y;
  //invoking the nested function
  showMessage("sum is "+ sum)
}

Lưu ý rằng chúng tôi đã gọi chức năng ShowMessage () bên trong định nghĩa chức năng của hàm addnum (). Trong bước tiếp theo, chúng tôi sẽ gọi hàm cha addnum () trong khi chuyển qua 5 5 và 6 và 6 là đối số:showMessage()” function inside the function definition of the “addNum()” function. In the next step, we will call the parent function addNum() while passing “5” and “6” as arguments:

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

Hướng dẫn how do you write a nested function in javascript? - làm thế nào để bạn viết một hàm lồng nhau trong javascript?

Phạm vi biến đổi của các chức năng lồng nhau JavaScript

Bây giờ, hãy để nói về phạm vi của các chức năng lồng nhau trong JavaScript. Các chức năng lồng nhau có phạm vi riêng của chúng; Tuy nhiên, họ cũng có thể truy cập phạm vi của hàm cha hoặc bên ngoài. Bạn nên ghi nhớ hai điểm về phạm vi biến của các hàm lồng nhau JavaScript: một hàm lồng nhau là riêng tư cho chức năng cha của nó và một hàm lồng nhau có quyền truy cập vào phạm vi chức năng cha mẹ.

Chúng tôi sẽ giải thích từng tuyên bố nhất định với sự trợ giúp của các ví dụ.

Như chúng tôi đã nêu, chức năng lồng nhau được coi là riêng tư cho chức năng có chứa định nghĩa của nó. Nó có nghĩa là chỉ có cha mẹ hoặc hàm chứa có thể truy cập vào chức năng lồng nhau và bạn sẽ không được phép truy cập nó bên ngoài chức năng được chỉ định. Điều này xảy ra bởi vì chúng tôi đã xác định hàm bên trong bên trong phạm vi hàm bên ngoài.private” for the function that contains its definition. It means only the parent or the containing function can access the nested function, and you will not be permitted to access it outside of the specified function. This happens because we have defined the inner function inside of the outer function scope.

Chẳng hạn, chúng tôi đã xác định một hàm bên ngoài, add addNumber () trong mã được đưa ra dưới đây và sau đó thêm hàm bên trong show showmessage () trong định nghĩa của hàm bên ngoài:AddNumber()” in the below-given code and then added the inner function “showMessage()” within the definition of the outer function:

hàm addNumber (x, y) { addNumber(x,y)
{

& nbsp; Chức năng ShowMessage (Văn bản) & NBSP; {& nbsp; & nbsp; Console.log (văn bản); & nbsp; }function showMessage(text)
  {
    console.log(text);
  }

& nbsp; Đặt sum = x+y; showMessage ("sum is"+ sum)}=x+y;
showMessage("sum is " + sum)
}

Bây giờ, khi chúng tôi cố gắng truy cập vào chức năng bên trong, Show ShowMessage () bên ngoài phạm vi của nó, nó sẽ ném lỗi tham chiếu của UNCAUGHER HERROR:showMessage()” outside of its scope, it will throw the “Uncaught ReferenceError” error:

Hướng dẫn how do you write a nested function in javascript? - làm thế nào để bạn viết một hàm lồng nhau trong javascript?

Tất cả các hàm, biến và đối số được xác định trong hàm bên ngoài có thể truy cập được vào hàm lồng nhau được tạo. Khả năng này được gọi là phạm vi từ vựng của Hồi giáo, trong đó hàm bên trong có thể truy cập vào phạm vi của hàm cha hoặc 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 tôi sẽ làm là sử dụng các đối số của X X và và Y và của chúng tôi, Chức năng bên ngoài của chúng tôi và Biến bên ngoài của chúng tôi và biến số Sum Sum:x” and “y” of our “addNumber()” outer function and the “sum” variable:

hàm addNumber (x, y) { addNumber(x,y)
{

& nbsp; Chức năng ShowMessage (Văn bản) & NBSP; {& nbsp; & nbsp; Console.log (văn bản); & nbsp; }function showMessage()
  {
    console.log(`sum of %d + %d is %d`,x ,y,sum);
  }

& nbsp; Đặt sum = x+y; showMessage ("sum is"+ sum)}=x+y;
  showMessage()
}

Bây giờ, khi chúng tôi cố gắng truy cập vào chức năng bên trong, Show ShowMessage () bên ngoài phạm vi của nó, nó sẽ ném lỗi tham chiếu của UNCAUGHER HERROR:AddNumber()” and pass the “4” and “6” as arguments:

Tất cả các hàm, biến và đối số được xác định trong hàm bên ngoài có thể truy cập được vào hàm lồng nhau được tạo. Khả năng này được gọi là phạm vi từ vựng của Hồi giáo, trong đó hàm bên trong có thể truy cập vào phạm vi của hàm cha hoặc bên ngoài.sum” variable, “x”, and “y” argument of the addNumber outer function in the showMessage() function:

Hướng dẫn how do you write a nested function in javascript? - làm thế nào để bạn viết một hàm lồng nhau trong javascript?

Trả lại chức năng lồng nhau 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 DisplayChoE () có biến số đếm và trả về hàm bên trong tăng ():count” variable and returns the increment() inner function:

hàm displayCount () {& nbsp; Đặt số lượng = 0; displayCounter() {
  let count = 0;

& nbsp; tăng = function () {& nbsp; & nbsp; trả về ++ số lượng; & nbsp; };= function () {
    return ++count;
  };

& nbsp; trả về gia tăng;}return increment;
}

Chúng tôi sẽ lưu trữ chức năng DisplayCount () trong bộ đếm trên mạng trong bước tiếp theo. Bây giờ, khái niệm chúng ta cần thảo luận ở đây là chức năng tăng () của Wikipedia sẽ có quyền truy cập vào thuộc tính của Count Count của chức năng của Display DisplayCount () khi DisplayCount () hoàn thành việc thực thi. Đóng cửa, một tính năng JavaScript, làm cho điều này có thể.counter” in the next step. Now the concept we need to discuss here is that the “increment()” function will still have access to the “count” property of the “displayCounter()” function when the displayCounter() finished the execution. “Closure”, a JavaScript feature, makes this possible.

Tuy nhiên, ở đây, thuộc tính của Count Count là cục bộ với chức năng DisplayCount (), tuy nhiên, chức năng tăng dần được xác định của Wap cũng có thể truy cập nó vì nó được lồng bên trong hàm Display DisplayCount ().count” property is local to the “displayCounter()” function, however, the defined “increment” function can also access it because it is nested inside the “displayCounter()” function:

Counter = DisplayCount ()= displayCounter()

Mã được đưa ra ở trên sẽ gọi ra chức năng DisplayCount (). Sau đó, hàm DisplayCount () trước tiên sẽ khởi tạo biến số đếm trên giá trị vào giá trị của 0 0 và sau đó trả về hàm tăng tăng (). Bởi vì thuộc tính đếm số của người Viking không bị phá hủy, khi chúng ta sẽ gọi hàm tăng thông qua bộ đếm (), mỗi lần tính toán của Count Count, sẽ được tăng lên theo mã được thêm vào:displayCounter()” function. Then, the displayCounter() function will first initialize the “count” variable to the “0” value and then returns the “increment()” function. Because the “count” property is not destroyed, when we will call the increment function through the “counter()”, each time the “count” property will be incremented according to the added code:

Console.log (Counter ()); Console.log (Counter ()); Console.log (Counter ());log(counter());
console.log(counter());
console.log(counter());

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

Hướng dẫn how do you write a nested function in javascript? - làm thế nào để bạn viết một hàm lồng nhau trong javascript?

Các tham số của các chức năng lồng nhau JavaScript

Hàm bên trong cũng có thể có đối số. Chẳng hạn, trong ví dụ sau, phần bên trong () được trả về bởi Outerfunction () và mỗi người trong số họ chấp nhận một bộ đối số:innerFunction()” is returned by the “outerFunction()” and each of them accepts an argument set:

hàm outerfunction (x) { outerfunction(x) {

& nbsp; bên trong = function (y) {& nbsp; & nbsp; Console.log ("x %d & nbsp; y %d", x, y) & nbsp; };= function (y) {
    console.log("x %d  y %d",x,y)
  };

& nbsp; Trả về chức năng bên trong;}return innerFunction;
}

Để có được phần bên trong (), chúng tôi sẽ thêm mã sau trong chương trình JavaScript của chúng tôi trong khi chuyển qua 3 3 3 như một đối số cho Outerfunction (): innerFunction(), we will add the following code in our JavaScript program while passing “3” as an argument for the outerFunction():

InnerFunction=outerfunction(3);=outerfunction(3);

Sau đó, chúng tôi sẽ gọi bên trong () với giá trị 7 7 như một đối số:7” as an argument:

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

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

Hướng dẫn how do you write a nested function in javascript? - làm thế nào để bạn viết một hàm lồng nhau trong javascript?

Sự kết luận

JavaScript cho phép bạn sử dụng các chức năng lồng nhau trong chương trình mà không gặp lỗi. Chức năng trẻ em hoặc bên trong có thể được thêm vào bên trong một hàm bên ngoài trong JavaScript. Tất cả các biến cục bộ, toàn cầu của hàm bên ngoài có thể truy cập được vào hàm bên trong. Trong trường hợp hàm bên ngoài, chỉ các giá trị thuộc tính toàn cầu và các phương thức và biến được xác định trong các hàm cha là có thể truy cập được. Bài viết này đã thảo luận về các chức năng lồng nhau của JavaScript. Hơn nữa, 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 JavaScript, với sự trợ giúp của các ví dụ.

Thông tin về các Tác giả

Hướng dẫn how do you write a nested function in javascript? - làm thế nào để bạn viết một hàm lồng nhau trong javascript?

Tôi là một người đam mê Linux, tôi thích đọc mọi blog Linux trên Internet. Tôi có bằng thạc sĩ về khoa học máy tính và đam mê học tập và giảng dạy.

Chúng ta có thể viết các chức năng lồng nhau trong JavaScript không?

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). and grants the inner function full access to all the variables and functions defined inside the outer function (and all other variables and functions that the outer function has access to).

Làm tổ trong JavaScript là gì?

Nesting là khi bạn viết một cái gì đó bên trong một thứ khác. Bạn có thể có một hàm bên trong một hàm khác: function x () {function y () {// cái gì đó; }} Bạn có thể có một điều kiện nếu điều kiện khác của điều kiện: if (ánh sáng ban ngày) {if (trước 12) {// Đó là buổi sáng; } khác {// Đó là buổi chiều; }}when you write something inside of something else. You can have a function inside of another function: function x () { function y() { // something; } } You can have an if condition inside of another if condition: if (daylight) { if (before 12) { //It's morning; } else { // it's afternoon; } }

Một ví dụ về chức năng lồng nhau là gì?

Ví dụ, bằng cách lồng hàm trung bình và tổng trong các đối số của hàm IF, công thức sau đây chỉ tổng hợp một tập hợp số (G2: G5) chỉ khi trung bình của một tập hợp số khác (F2: F5) lớn hơn 50.Mặt khác, nó trả về 0. Các hàm trung bình và tổng được lồng trong hàm if.by nesting the AVERAGE and SUM function in the arguments of the IF function, the following formula sums a set of numbers (G2:G5) only if the average of another set of numbers (F2:F5) is greater than 50. Otherwise, it returns 0. The AVERAGE and SUM functions are nested within the IF function.

Chúng ta có thể viết các chức năng lồng nhau không?

Vì trong hầu hết các hàm ngôn ngữ là các loại trả về hợp lệ, có thể tạo hàm lồng nhau truy cập một tập hợp các tham số từ hàm bên ngoài và có hàm đó là giá trị trả về của hàm bên ngoài.it is possible to create a nested function that accesses a set of parameters from the outer function and have that function be the outer function's return value.