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