Tôi có thể tạo một hàm đệ quy trong một biến như vậy:
/* Count down to 0 recursively.
*/
var functionHolder = function (counter) {
output(counter);
if (counter > 0) {
functionHolder(counter-1);
}
}
Với điều này, functionHolder(3);
sẽ xuất ra 3
2
1
0
. Giả sử tôi đã làm như sau:
var copyFunction = functionHolder;
copyFunction(3);
sẽ xuất 3
2
1
0
như trên. Nếu sau đó tôi đã thay đổi functionHolder
như sau:
functionHolder = function(whatever) {
output("Stop counting!");
Sau đó, functionHolder(3);
sẽ cho Stop counting!
, như mong đợi.
copyFunction(3);
bây giờ cung cấp 3
Stop counting!
như nó đề cập đến functionHolder
, không phải hàm (mà chính nó trỏ đến). Điều này có thể là mong muốn trong một số trường hợp, nhưng có cách nào để viết hàm để nó gọi chính nó thay vì biến giữ nó không?
Đó là, có thể chỉ thay đổi dòng functionHolder(counter-1);
để trải qua tất cả các bước này vẫn cho 3
2
1
0
khi chúng ta gọi copyFunction(3);
không? Tôi đã thử this(counter-1);
nhưng điều đó mang lại cho tôi lỗi this is not a function
.