javascript - 一个 JavaScript 语言问题

标签 javascript scope

运行以下代码时出现 JavaScript 错误:

<!DOCTYPE html>
<meta charset="utf-8">
<title>Untitled Document</title>
<script>
    var fn = function () {
        //var aaa = 'AAA';
        return function () {
            alert(aaa);
        };
    }();

    var foo2 = function () {
        var aaa = 'BBB';
        (function () {
            alert(aaa); // 'BBB'
        })();
        fn(); // Error: Uncaught ReferenceError: aaa is not defined
    }();
</script>

我想当fn函数运行时,应该可以在foo2函数中找到aaa

但是我得到了错误。为什么?

谢谢!

最佳答案

I think when fn function running, it should be able to find aaa in foo2 function.

不,不应该。 aaafoo2 中声明为局部变量,在 fn 中不可访问。是什么让你有不同的想法?我所见过的编程语言都不会像那样。

如果您取消对行 //var aaa = 'AAA'; 的注释,它将起作用,但是 fn 中的警报当然会说“AAA”而不是“BBB”。

关于javascript - 一个 JavaScript 语言问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4780804/

相关文章:

javascript - 在继续之前等待多个异步调用完成

scope - 如何访问范围之外的 rust 变量?

javascript - 我可以从 jQuery 中的匿名回调函数返回数据吗?

JavaScript 作用域被改变了?为什么会这样?

variables - lua 变量作用域

c++ - 当分配给 const 时,C++ 临时的生命周期延长为词法

javascript - jQuery 在特定 id 的元素中添加具有属性的新 DOM 元素

javascript - Ember 加载初始化错误 : Could not find module `ember-load-initializers`

javascript - 等待 Sequelize 中所有未决的 promise

javascript - 数组和可观察数组有什么区别?