【发布时间】:2020-07-29 09:55:01
【问题描述】:
我正在学习 JavaScript。我有个疑问。听说我们在使用setTimeout方法的时候,javascript会把那个setTimeout的回调函数从调用栈中移除,放到另一个调用栈上,继续执行当前调用栈。
function f1() {
console.log("print first");
setTimeout(() => {
console.log("print in time out");
}, 4000);
console.log("print last");
}
这个函数的输出
先打印
最后打印
打印超时
因为setTimeOut的回调放入了一个新的栈中。
如果我使用 Ajax 请求或类似的东西需要一些时间来执行而不使用异步会怎样。像这样的。
function API(){
const apiCALL = fetch('https://jsonplaceholder.typicode.com/posts');
console.log(apiCALL);
}
这是否也放入另一个调用堆栈?
【问题讨论】:
-
究竟什么是“需要很长时间才能执行的方法”?像
while (true) {}这样的东西?还是 AJAX 请求或类似的东西? -
是的,像 AJAX 先生
-
API函数将立即结束执行并且不记录任何感兴趣的内容。fetch正在返回一个承诺,要获得承诺结果,您需要向其添加.then回调。此时它的行为与setTimeout的情况相同。
标签: javascript settimeout callstack