Hướng dẫn call same function inside function javascript - gọi cùng chức năng bên trong chức năng javascript

Tôi có một chức năng thực hiện một số cuộc gọi DDBB, vì vậy nó không đồng bộ.

Tôi cần gọi hàm và kiểm tra giá trị dữ liệu (người chiến thắng) trong đối tượng JSON mà nó trả về. Nếu đó là sự thật, tôi cần gọi lại chức năng cho đến khi người thắng cuộc == sai.

Tôi không thể sử dụng trong khi vì nó không đồng bộ, làm thế nào tôi có thể làm điều này?

  someFunction(function(result) {
     // if result.winner == true repeat 
  })

Hỏi ngày 21 tháng 12 năm 2014 lúc 11:53Dec 21, 2014 at 11:53

Hướng dẫn call same function inside function javascript - gọi cùng chức năng bên trong chức năng javascript

3

Bạn có thể gọi cùng một chức năng gọi lại cho đến khi điều kiện là true:

someFunction(function repeat(result) {
    if (result.winner) {
        someFunction(repeat);
    }
});

Kiểm tra bản demo dưới đây.

someFunction(function repeat(result) {
    document.body.innerHTML += '<br>' + result.winner;
    if (result.winner) {
        someFunction(repeat);
    }
});

var results = [true, true, true, false];
function someFunction(callback) {
    setTimeout(function() {
        callback({winner: results.shift()});
    }, (Math.random() + 1) * 1000 | 0);
}

Đã trả lời ngày 21 tháng 12 năm 2014 lúc 12:17Dec 21, 2014 at 12:17

DFSQDFSQdfsq

Phù bằng vàng 190K2525 gold badges232 silver badges254 bronze badges

Bạn đã xem Async.js chưa? Nó có một số chức năng Async dòng điều khiển. Bạn có thể muốn nhìn vào trong khi, dowhilst, cho đến khi, dountil:

https://github.com/caolan/async#whilst

whilst(test, fn, callback)

Nhiều lần gọi FN, trong khi bài kiểm tra trả về đúng. Cuộc gọi gọi lại khi dừng hoặc xảy ra lỗi.

Đã trả lời ngày 22 tháng 12 năm 2014 lúc 14:32Dec 22, 2014 at 14:32

YuraayuraaYuraA

673 huy hiệu đồng3 bronze badges

Gọi một hàm bên trong một hàm khác #

Để gọi một hàm bên trong một hàm khác, hãy xác định hàm bên trong hàm bên ngoài và gọi nó. Khi sử dụng từ khóa

someFunction(function repeat(result) {
    if (result.winner) {
        someFunction(repeat);
    }
});
0, hàm được nâng lên trên cùng của phạm vi và có thể được gọi từ bất cứ nơi nào bên trong hàm bên ngoài.

Copied!

function outerFunc(a, b) { function innerFunc(a, b) { return a + b; } const result = innerFunc(a, b); return result; } console.log(outerFunc(10, 10)); // 👉️ 20 console.log(outerFunc(10, 20)); // 👉️ 30

Ví dụ sau đây cho thấy cách chúng ta có thể gọi hàm bên trong trước khi được khai báo. Điều này là do cách nâng cao hoạt động trong JavaScript.

Copied!

function outerFunc() { const num1 = 5; const num2 = 10; // 👇️ call inner function before it's declared const result = innerFunc(); function innerFunc() { return num1 + num2; } return result; } console.log(outerFunc()); // 👉️ 15

Điều này chỉ hoạt động cho các chức năng được khai báo bằng cách sử dụng từ khóa

someFunction(function repeat(result) {
    if (result.winner) {
        someFunction(repeat);
    }
});
0 (không phải là chức năng mũi tên).

Bạn có thể tưởng tượng rằng tuyên bố của hàm được nâng lên đỉnh của phạm vi, do đó nó có thể được gọi từ bất cứ nơi nào trong phạm vi.

Một cách tiếp cận khác là trả về hàm bên trong từ bên ngoài.

Copied!

function outerFunc() { function innerFunc(a, b) { return a + b; } return innerFunc; } const innerFunc = outerFunc(); console.log(innerFunc(2, 3)); // 👉️ 5 console.log(innerFunc(3, 3)); // 👉️ 6

Lưu ý rằng chúng tôi đã không sử dụng dấu ngoặc đơn

someFunction(function repeat(result) {
    if (result.winner) {
        someFunction(repeat);
    }
});
2 để gọi hàm bên trong bên ngoài.

Chúng tôi đã trả lại chức năng mà không cần gọi nó. Nói cách khác, chúng tôi đã trả lại một tham chiếu đến hàm bên trong, không phải là kết quả của việc gọi nó.

Điều này cho phép chúng tôi gọi chức năng bên trong nhiều lần khi cần thiết, chuyển các tham số khác nhau mỗi lần.

Điều hữu ích nhất trong kịch bản này là hàm bên trong nhớ các biến được khai báo ở hàm bên ngoài giữa các lời mời.

Copied!

function outerFunc() { const z = 100; function innerFunc(a, b) { return a + b + z; } return innerFunc; } const innerFunc = outerFunc(); console.log(innerFunc(2, 3)); // 👉️ 105 console.log(innerFunc(3, 3)); // 👉️ 106

Lưu ý rằng hàm bên trong nhớ lại giá trị của biến

someFunction(function repeat(result) {
    if (result.winner) {
        someFunction(repeat);
    }
});
3 giữa các lần gọi.

Khái niệm này được gọi là đóng cửa trong JavaScript.

Hàm bên trong được gói với các tài liệu tham khảo về trạng thái xung quanh.

Điều này có nghĩa là hàm bên trong có quyền truy cập vào các biến được khai báo bên trong phạm vi của hàm bên ngoài bất cứ lúc nào.

Điều này rất hữu ích trong nhiều kịch bản khác nhau. Ví dụ: bạn có thể chuyển một tham số cho hàm bên ngoài mà nó sẽ nhớ cho bất kỳ cuộc gọi hàm bên trong nào.

Copied!

function outerFunc(a) { function innerFunc(b, c) { return a + b + c; } return innerFunc; } const innerFunc = outerFunc(10); console.log(innerFunc(1, 1)); // 12 console.log(innerFunc(1, 2)); // 13

Chúng tôi đã vượt qua

someFunction(function repeat(result) {
    if (result.winner) {
        someFunction(repeat);
    }
});
4 dưới dạng tham số cho hàm bên ngoài và lưu trữ kết quả trong một biến.

Biến

someFunction(function repeat(result) {
    if (result.winner) {
        someFunction(repeat);
    }
});
5 lưu trữ một tham chiếu đến hàm
someFunction(function repeat(result) {
    if (result.winner) {
        someFunction(repeat);
    }
});
5, trong đó biến
someFunction(function repeat(result) {
    if (result.winner) {
        someFunction(repeat);
    }
});
7 trỏ đến giá trị
someFunction(function repeat(result) {
    if (result.winner) {
        someFunction(repeat);
    }
});
4.

Bây giờ chúng ta có thể bỏ qua

someFunction(function repeat(result) {
    if (result.winner) {
        someFunction(repeat);
    }
});
4 từ các tham số khi gọi hàm bên trong.

Đọc thêm #

  • Cách gọi hàm bên trong một đối tượng trong JavaScript
  • Kiểm tra xem một hàm trả về một lời hứa trong JavaScript

Chúng ta có thể gọi cùng một hàm trong một hàm trong JavaScript không?

Gọi một chức năng từ bên trong được gọi là đệ quy và câu trả lời đơn giản là, vâng. and the simple answer is, yes.

Một chức năng có thể gọi một chức năng khác không?

Điều quan trọng là phải hiểu rằng mỗi chức năng chúng tôi viết có thể được sử dụng và được gọi từ các chức năng khác mà chúng tôi viết.Đây là một trong những cách quan trọng nhất mà các nhà khoa học máy tính gặp vấn đề lớn và chia nó thành một nhóm các vấn đề nhỏ hơn.

Tôi có thể gọi một hàm nhiều lần javascript không?

Để chạy một hàm nhiều lần sau một khoảng thời gian cố định, chúng tôi đang sử dụng một vài chức năng.Phương thức setInterval (): Phương thức này gọi một hàm ở các khoảng thời gian được chỉ định (tính bằng ms).Phương thức này sẽ gọi liên tục hàm cho đến khi ClearInterVal () chạy hoặc cửa sổ được đóng.setInterval() Method: This method calls a function at specified intervals(in ms). This method will call continuously the function until clearInterval() is run, or the window is closed.

Chúng ta có thể viết một hàm bên trong một hàm 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).