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');
我对 Array.prototype.map 的了解:
问题:
为什么它没有出现在调用堆栈中?是因为它运行在 C/C++ 中并且位于 JS 引擎之外吗?或者也许这只是一种简化,实际上它就在回调下方,只是没有显示?
如果 .map 上下文不在调用堆栈中,JS 如何“知道”它必须等待迭代结束才能移动到下一行代码?浏览器是否不断在堆栈顶部抛出回调上下文,导致 JS 忙碌?
堆栈中的
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的内部实现是什么,它应该被认为是一个黑盒子