函数未执行完毕的时候又调用了该函数,会发生什么情况?
发布于 11 年前 作者 mscrm 6227 次浏览 最后一次编辑是 8 年前

我是新手,被node.js回调搞晕了。debug发疯。

程序是这样的:通过监听80端口,根据接收到的post数据执行一个request去抓取一个网页。

当request未完全抓取完毕,又来了一个post数据,这个时候又要再去request抓取另外一个网页。

这个不会冲突吧?

2 回复

冲突不了吧。 按照语言的设计,函数的执行过程是以栈的结构执行的,而栈的特点后进先出 举个一个例子,函数A调用函数B,函数B调用了函数C 在函数A调用函数B的时候,系统会将这个A函数放进栈里,去执行函数B 函数B在执行的时候遇到了要调用函数C,那么又将这个函数B塞进了这个栈里,然后去执行函数C

当C函数执行完成以后,会去框里把最后一个函数拉出来继续执行,因为栈的后进先出的特性,所以这个被拉出来的函数就是B了; 而B在执行完成以后,会再去栈里拉数据,栈里还有一个函数A,那么这个A就会被拉出来继续执行。 A函数执行完成以后,再去栈里拉,这时候栈里已经没有可执行的函数了,那么这个函数的执行就基本结束了。

我这里之所以讲的是A,B,C三个函数,其实只是想把你先理解一下,而反复调用同一个函数其实也是一样的过程,在系统里不会去区分这个函数的名字。所以你说的这个问题不会有冲突

不过要注意的是,栈也有空间限制的,如果回调的函数过多,栈空间会溢出报错的。

nodejs的i/o是异步的,网络请求也是i/0,当然不会冲突

回到顶部