如果 Array.prototype.map 不在调用堆栈中,JavaScript 如何知道在迭代结束之前不运行任何其他代码?

问题描述 投票:0回答:1
function callback(x) {
  // also tried debugger to find .map in the call stack
  console.trace();

  return 2*x;
}

[1,2,3].map(callback);

console.log('Next line of code');

console

我对 Array.prototype.map 的了解:

  • 同步
  • 本机代码的外观,可能用 C/C++ 实现

问题:

  1. 为什么它没有出现在调用堆栈中?是因为它运行在 C/C++ 中并且位于 JS 引擎之外吗?或者也许这只是一种简化,实际上它就在回调下方,只是没有显示?

  2. 如果 .map 上下文不在调用堆栈中,JS 如何“知道”它必须等待迭代结束才能移动到下一行代码?浏览器是否不断在堆栈顶部抛出回调上下文,导致 JS 忙碌?

javascript browser callstack executioncontext
1个回答
0
投票

堆栈中的

Array::map()

function callback() {
  throw new Error();
}

try {
  [1,2,3].map(callback);
}catch(e){
  console.log(e.stack);
}

console.log('Next line of code');

Chrome 中的输出:

Error
    at callback (https://stacksnippets.net/js:13:9)
    at Array.map (<anonymous>)
    at https://stacksnippets.net/js:17:11
Next line of code

不要试图弄清楚JS的内部实现是什么,它应该被认为是一个黑盒子

© www.soinside.com 2019 - 2024. All rights reserved.