javascript - 内置函数是否添加到调用堆栈中?

标签 javascript

我是 js 的新手,正在阅读 Eloquent javascript 书,但调用堆栈部分让我感到困惑。这是示例代码:

debugger;
function greet(who) { 
debugger;
  console.log("Hello " + who);
}
debugger;
greet("Harry");
debugger;
console.log("hi");  
console.log("bye");

这是我观察到的,debugger 和 console.log 是一个匿名调用。函数 greet 是在全局范围内定义的,但是当我到达第 7 行时,堆栈上仍然有一个匿名调用,并且函数 greet 被添加到堆栈上?但为什么会有匿名?有人可以告诉我更多关于调用堆栈的信息以及这里发生了什么吗?

最佳答案

所有顶级代码(不在函数中)都会被 JS 引擎自动移动到内部函数中。您的代码将转换为:

(function() {
    debugger;
    function greet(who) { 
        debugger;
        console.log("Hello " + who);
    }
    debugger;
    greet("Harry");
    debugger;
    console.log("hi");  
    console.log("bye");
})();

这是位于调用堆栈底部的匿名函数。

关于javascript - 内置函数是否添加到调用堆栈中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43699726/

相关文章:

javascript - 基金会 6 : How to add tabs using jquery

javascript - 如何通过 javascript 使用请求中的属性?

javascript - 如何从位于 updatePanel 的 Gridview 中的 LinkBut​​ton 触发 Onclick 事件?

javascript - 如何在网站上制作一个按预定时间按钮的脚本(如 pg down 或 space)?

javascript - 如何以 Angular 方式将多个模型添加在一起

javascript - JavaScript 导出语法之间有什么区别?

javascript - 当数据链接到变量时,d3js 不进行绘图

javascript - 在 IE : alternative for setAttribute method 中动态设置输入元素的 id 属性

javascript - 在 phonegap 中对图像创建自定义弹出测试?

Javascript 刽子手游戏