gpt4 book ai didi

javascript - Javascript 中的作用域链以及在全局作用域内调用嵌套函数

转载 作者:行者123 更新时间:2023-11-28 18:54:24 25 4
gpt4 key购买 nike

这是我想了解的示例(实际上不起作用)。

 var myVar = 2;

function a(){
var myVar = 2;
function b(){
console.log(myVar);
}
};
a();
b();

这将在控制台中输出:Uncaught ReferenceError: b is not Defined。

如您所见,我有一个名为 a 的函数,其中包含一个名为 b 的嵌套函数。

起初我以为我可以在 a 之外调用 b 并使其正常工作。我认为这会起作用,因为一开始我调用了 a 函数。

通过这样做,我想到了这样一个事实:a 函数 将被放入执行堆栈中,并且在其创建阶段,内部定义的 b 函数 将被设置内存中。

由于这是在内存中,我想我可以在函数之外执行它。这显然行不通。

所以我的结论是b函数确实在a函数的创建阶段被设置到内存中,但是一旦a函数执行完毕,一旦从执行堆栈中弹出,b 函数也会同时从内存中弹出。

因此在全局范围内调用它(我的意思是 b 函数)是不可能的。

我的说法正确吗?

最佳答案

通过谈论执行堆栈、创建阶段等,您使事情变得不必要地复杂化。

解释非常简单:您无法调用 b,因为规范表明 b 超出了您尝试调用它的站点的范围。这就是全部,故事结束。

如果转换为 PHP,您的示例实际上会起作用,这让我觉得也许这就是您的想法的来源。但 JS 和 PHP 是不同的语言,PHP 处理嵌套函数的方式(在我看来很荒谬)并没有转移。

关于javascript - Javascript 中的作用域链以及在全局作用域内调用嵌套函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33925321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com