我已经编程 5 年了,但我刚刚开始想知道一些事情。在此代码示例中,我从函数返回一个值并将其存储为变量。这按什么顺序发生?该语言是解释型语言还是编译型语言重要吗?
function foo() {
return "junk";
}
var bar = foo();
现在我知道了 bar =“垃圾”。这按什么顺序发生?我知道当调用一个函数时,它会将控制权返回给调用它的函数,并且程序会从中断处继续,那么这是否意味着它会返回到 'var bar =' ?
在动态类型语言中, bar 最初是如何创建的?它是在堆上创建的吗?
最佳答案
JavaScript 中的所有函数调用都作为帧堆栈执行。
在您的情况下,当发生“foo”调用时,将为整个“foo”函数调用创建一个堆栈帧,并且该帧包含所有 foo 的变量及其信息。
如果在 foo 中调用另一个函数,则会为该函数创建另一个堆栈帧。
你知道堆栈的行为是对的,最后进来的先出来。这里 foo 内部的函数(如果存在)首先执行并退出堆栈。下一个回合是“foo”。
然后“foo”执行并从堆栈中出来,现在变量turn出现(在你的情况下它是“bar”)。
关于javascript - JavaScript 中的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40297942/