递归函数是运行 in Javascript,如何执行回调函数?
How to execute callback function while resursive function is running in Javascript?
无法运行回调函数,而递归函数是运行ning?
递归斐波那契函数和setInterval()的示例代码
'use strict';
function fibo(x) {
if (x === 0) {
console.info('fibo( ' + x + ' ) == 0');
return 0;
} else if (x === 1) {
console.info('fibo( ' + x + ' ) == 1');
return 1;
}
return fibo(x-2) + fibo(x-1);
};
fibo(10);
setInterval(() =>{console.info('hello')},10);
执行此代码,在 fibo(10) 完成其工作后设置 Interval 运行。
如何在 fibo() 运行ning 时显示 'hello' 日志?
递归函数是运行ning时是否可以切入回调函数?
How to display 'hello' log while fibo() is running?
因为 fibo
是同步的,所以在正常情况下你不能。 JavaScript 以服务于作业队列的线程为基础工作。虽然一个作业正在 运行ning,但没有其他作业可以在该线程上 运行(例如 setInterval
排队等待调用回调的作业)。每个 realm(松散地,全局环境)只有一个线程,并且在所有主要环境(包括浏览器)中只有一个主线程。你可以创造其他人,但他们有自己的环境。
您有两个选择:
- 使
fibo
异步,每次调用它都会安排另一个作业中的下一个调用(例如通过 setTimeout
)。
- 制作
fibo
生成器函数,并为值重复调用它,在这些调用中穿插 setInterval
回调。
- 使用工作线程。
由于您的 setInterval
代码和 fibo
代码不共享任何数据,因此使用工作线程很有意义:
main.js
:
'use strict';
function fibo(x) {
if (x === 0) {
console.info('fibo( ' + x + ' ) == 0');
return 0;
} else if (x === 1) {
console.info('fibo( ' + x + ' ) == 1');
return 1;
}
return fibo(x-2) + fibo(x-1);
};
new Worker("worker.js");
fibo(10);
worker.js
:
setInterval(() =>{console.info('hello')},10);
如果他们共享数据,您可以使用 shared memory,但要注意同步问题。
无法运行回调函数,而递归函数是运行ning?
递归斐波那契函数和setInterval()的示例代码
'use strict';
function fibo(x) {
if (x === 0) {
console.info('fibo( ' + x + ' ) == 0');
return 0;
} else if (x === 1) {
console.info('fibo( ' + x + ' ) == 1');
return 1;
}
return fibo(x-2) + fibo(x-1);
};
fibo(10);
setInterval(() =>{console.info('hello')},10);
执行此代码,在 fibo(10) 完成其工作后设置 Interval 运行。
如何在 fibo() 运行ning 时显示 'hello' 日志? 递归函数是运行ning时是否可以切入回调函数?
How to display 'hello' log while fibo() is running?
因为 fibo
是同步的,所以在正常情况下你不能。 JavaScript 以服务于作业队列的线程为基础工作。虽然一个作业正在 运行ning,但没有其他作业可以在该线程上 运行(例如 setInterval
排队等待调用回调的作业)。每个 realm(松散地,全局环境)只有一个线程,并且在所有主要环境(包括浏览器)中只有一个主线程。你可以创造其他人,但他们有自己的环境。
您有两个选择:
- 使
fibo
异步,每次调用它都会安排另一个作业中的下一个调用(例如通过setTimeout
)。 - 制作
fibo
生成器函数,并为值重复调用它,在这些调用中穿插setInterval
回调。 - 使用工作线程。
由于您的 setInterval
代码和 fibo
代码不共享任何数据,因此使用工作线程很有意义:
main.js
:
'use strict';
function fibo(x) {
if (x === 0) {
console.info('fibo( ' + x + ' ) == 0');
return 0;
} else if (x === 1) {
console.info('fibo( ' + x + ' ) == 1');
return 1;
}
return fibo(x-2) + fibo(x-1);
};
new Worker("worker.js");
fibo(10);
worker.js
:
setInterval(() =>{console.info('hello')},10);
如果他们共享数据,您可以使用 shared memory,但要注意同步问题。