我所阅读的关于JS运行时的所有博客和视频都谈到堆栈、堆和队列。这些例子中没有一个解释过函数声明在运行时传递时会发生什么?
我所看到的任何源都没有提到函数声明存储在内存中,或者在函数最初调用之后,有任何类型的标志可以引用到这个位置。
例如,考虑以下博客:https://blog.sessionstack.com/how-does-javascript-actually-work-part-1-b0bacc073cf
这篇特定的博客文章解释了调用堆栈,但没有解释函数声明乘法(x,y)发生了什么。它是否以任何方式存储或引用以供将来调用?
function multiply(x, y) {
return x * y;
}
function printSquare(x) {
var s = multiply(x, x);
console.log(s);
}
printSquare(5);发布于 2018-11-21 18:52:31
代码的计算分为两个阶段:首先对代码进行解析,然后对代码进行评估。在解析过程中,创建了所谓的EnvironmentRecords。说明书上写着:
每个声明式环境记录都与包含变量、常量、let、类、模块、导入和/或函数声明的ECMAScript程序作用域相关联。声明式环境记录绑定由其作用域中包含的声明定义的一组标识符。
在评估阶段,标识符将在当前环境记录中查找。
发布于 2018-11-21 18:47:50
它们被添加到全局window对象中,就像全局变量一样。
function multiply(x, y) {
return x * y;
}
function printSquare(x) {
var s = multiply(x, x);
console.log(s);
}
printSquare(5);
console.log(window.multiply(2,2));
https://stackoverflow.com/questions/53418666
复制相似问题