Javascript堆栈和递归调用

Javascript堆栈和递归调用,javascript,Javascript,假设以下方法(只是好奇,我希望在js中失败) foo(0); 功能foo(i){ 如果堆栈中的(i1000is对于浏览器来说不是一个真正需要处理的大尺寸 此外,同一时间不会有超过2个is(甚至可能只有一个),每个函数每秒执行一次 此代码不会加载1000个调用以在1秒的时间间隔内触发,这将链接调用,防止堆栈膨胀。1000is对于浏览器来说,堆栈中的大小不是很大 此外,同一时间不会有超过2个is(甚至可能只有一个),每个函数每秒执行一次 此代码不会加载1000个调用以在1秒的时间间隔内触发,这将链接

假设以下方法(只是好奇,我希望在
js
中失败)

foo(0);
功能foo(i){

如果堆栈中的(i1000
i
s对于浏览器来说不是一个真正需要处理的大尺寸

此外,同一时间不会有超过2个
i
s(甚至可能只有一个),每个函数每秒执行一次


此代码不会加载1000个调用以在1秒的时间间隔内触发,这将链接调用,防止堆栈膨胀。

1000
i
s对于浏览器来说,堆栈中的大小不是很大

此外,同一时间不会有超过2个
i
s(甚至可能只有一个),每个函数每秒执行一次


此代码不会加载1000个调用以在1秒的时间间隔内触发,这将链接调用,防止堆栈膨胀。

1000
i
s对于浏览器来说,堆栈中的大小不是很大

此外,同一时间不会有超过2个
i
s(甚至可能只有一个),每个函数每秒执行一次


此代码不会加载1000个调用以在1秒的时间间隔内触发,这将链接调用,防止堆栈膨胀。

1000
i
s对于浏览器来说,堆栈中的大小不是很大

此外,同一时间不会有超过2个
i
s(甚至可能只有一个),每个函数每秒执行一次


此代码不会加载1000个调用以在1秒的间隔内触发,这将链接调用,防止堆栈膨胀。

首先在javascript中没有“int”你必须说
var i
。它单独得到声明的类型。如果你想获得关于堆栈的信息,你可以使用调试控制台。并导航到调用堆栈。这是一个很好的功能,你也有一个很好的概述。我更喜欢Chromes调试器。你可以先按F12

在javascript中没有“int“你必须说
var i
。它单独得到声明的类型。如果你想获得有关堆栈的信息,你可以使用调试控制台。并导航到调用堆栈。这是一个很好的功能,你也有一个很好的概述。我更喜欢Chromes调试器。你可以先按F12

,在javascript中没有“int“你必须说
var i
。它单独得到声明的类型。如果你想获得有关堆栈的信息,你可以使用调试控制台。并导航到调用堆栈。这是一个很好的功能,你也有一个很好的概述。我更喜欢Chromes调试器。你可以先按F12

,在javascript中没有“int”你必须说
var i
。它单独得到声明的类型。如果你想得到关于堆栈的信息,你可以使用调试控制台。并导航到调用堆栈。这是一个很好的功能,你也有一个很好的概述。我更喜欢Chromes调试器。你可以按F12到达那里。是的,你会警告1000“foo”“使用此代码的邮件

但是,浏览器不会被
i
变量的数量所困扰。
i
foo
的一个局部变量,因此,只要
foo
正在执行,它就会一直存在。每次setTimeout回调执行完毕,
i
和整个函数的内存占用都符合条件通过浏览器进行垃圾收集(这将在适当的时候发生)

原因是由于使用了setTimeout,这里没有保留的内存调用堆栈。setTimeout不会对
foo
返回的值执行任何操作,因此内存中没有指针阻止收集该函数或其变量环境。

是的,您将警告1000“foo”使用此代码的邮件

但是,浏览器不会被
i
变量的数量所困扰。
i
foo
的一个局部变量,因此,只要
foo
正在执行,它就会一直存在。每次setTimeout回调执行完毕,
i
和整个函数的内存占用都符合条件通过浏览器进行垃圾收集(这将在适当的时候发生)

原因是由于使用了setTimeout,这里没有保留的内存调用堆栈。setTimeout不会对
foo
返回的值执行任何操作,因此内存中没有指针阻止收集该函数或其变量环境。

是的,您将警告1000“foo”使用此代码的邮件

但是,浏览器不会被
i
变量的数量所困扰。
i
foo
的一个局部变量,因此,只要
foo
正在执行,它就会一直存在。每次setTimeout回调执行完毕,
i
和整个函数的内存占用都符合条件通过浏览器进行垃圾收集(这将在适当的时候发生)

原因是由于使用了setTimeout,这里没有保留的内存调用堆栈。setTimeout不会对
foo
返回的值执行任何操作,因此内存中没有指针阻止收集该函数或其变量环境。

是的,您将警告1000“foo”使用此代码的邮件

但是,浏览器不会被
i
变量的数量所困扰。
i
foo
的一个局部变量,因此,只要
foo
正在执行,它就会一直存在。每次setTimeout回调执行完毕,
i
和整个函数的内存占用都符合条件通过浏览器进行垃圾收集(这将在适当的时候发生)

foo(0);
function foo(i){
 if(i<1000){
  setTimeout(function(){foo(i+1);}, 1000);
 }
 alert('I am foo');
}
main() [local foo]
main() -> foo [local i = 0]
main()
(empty)
setTimeout()
setTimeout() -> foo [local i = 1]
setTimeout()
(empty)
setTimeout()
setTimeout() -> foo [local i = 2]
setTimeout()
(empty)