作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我想了解的示例(实际上不起作用)。
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/
我是一名优秀的程序员,十分优秀!