Javascript 函数作用域和提升:揭开隐藏的机制
您偶然发现了一个涉及 JavaScript 作用域和提升的令人困惑的示例。让我们更深入地研究这些概念,以获得更清晰的理解。
函数提升
提升将函数声明提升到其包含范围的顶部。在您的示例中:
function b() { a = 10; return; function a() {} }
解释器按如下方式重新排列此代码:
function b() { function a() {} a = 10; return; }
这意味着内部函数 a() 声明实际上放置在 b() 的开头函数,即使它稍后出现在代码中。
变量作用域
在 JavaScript 中,变量的作用域可以是全局的,也可以是本地的。全局变量可以从程序中的任何位置访问,而局部变量则被限制在其定义函数的范围内。
函数声明的奇怪情况
在你的代码中, b() 中的内部函数 a() 声明被解释为立即函数调用:
var a = function () {};
这有效地创建了一个局部变量 a在 b() 函数中,它隐藏了全局 a 变量。
将它们放在一起
结合提升和变量作用域的概念,您可以可视化执行顺序如下:
以上是JavaScript 函数提升和作用域如何影响变量赋值和检索?的详细内容。更多信息请关注PHP中文网其他相关文章!