【问题标题】:Javascript function scopeJavascript函数范围
【发布时间】:2011-11-15 01:30:15
【问题描述】:

为什么在下面的示例中,警报会打印 2? var a 对函数 n 未知...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

    <title>Test Doc</title>
    <script type="text/javascript">
        var a = 1;
        function f() {
            var a = 2;
            function n() {
                alert(a);
            }
            n();
        }
        f();
    </script>
</head>

<body>


</body>
</html>

【问题讨论】:

  • "var a is unknown to function n..." 在 PHP 中就是这种情况。幸运的是 JavaScript 不是 PHP。

标签: javascript function scope public


【解决方案1】:

JavaScript 函数继承其父级的作用域。内部变量会影响同名的父作用域变量。

Further Reading.

【讨论】:

  • +1 定位和良好的链接。 @user443946,在该文档中搜索“嵌套函数和闭包”。
【解决方案2】:

a 被贴花为全局变量并赋值为 1。a 也在函数 f() 内声明并赋值为 2。函数 n() 在函数 f() 内声明并在分配给“内部”a 后调用。

所以当n被调用时,标识符a将从n的范围内解析出来。作用域链上第一个具有a 属性的变量对象是f 中声明的变量对象,因此返回它的值。

【讨论】:

    【解决方案3】:

    它会提醒“2”。

    在此处测试您的 javascript 示例:jsfiddle.net

    你的例子贴在这里:your javascript example

    为什么 var a 不知道 n() ??

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-13
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多