gpt4 book ai didi

javascript - 递归javascript超过调用堆栈大小

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:48:04 25 4
gpt4 key购买 nike

我正在编写一个正在轮询内容的 angularjs Controller 。轮询函数超时调用自身。下面是这方面的两个例子。第一个超过调用堆栈大小,但第二个示例没有。这是为什么?

示例 1(超出调用堆栈大小):

myApp.controller('Ctrl1', function($scope, $timeout) {
$scope.value = 1;
function poll() {
$scope.value++;
$timeout(poll(), 1000);
}
poll();
});

示例 2(工作正常):

myApp.controller('Ctrl1', function($scope, $timeout) {
$scope.value = 1;
function poll(){
$timeout(function() {
$scope.value++;
poll();
}, 1000);
};
poll();
});

最佳答案

您传递的不是函数,而是它的返回值 (undefined)。这意味着您立即调用它,当它调用自身时,好吧,这是您的堆栈溢出。

改变

$timeout(poll(), 1000);

$timeout(poll, 1000);

顺便说一句,你可以重写

function poll() {
$scope.value++;
$timeout(poll, 1000);
}
poll();

以一种不会污染外部范围的更优雅的方式:

(function poll() {
$scope.value++;
$timeout(poll, 1000);
})();

关于javascript - 递归javascript超过调用堆栈大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22098763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com