Javascript函数作用域

Javascript函数作用域,javascript,function,scope,public,Javascript,Function,Scope,Public,为什么警报会在下面的示例中打印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

为什么警报会在下面的示例中打印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=1;
函数f(){
var a=2;
函数n(){
警报(a);
}
n();
}
f();

JavaScript函数继承其父函数的作用域。内部变量对同名的父作用域变量进行阴影处理


.JavaScript函数继承其父函数的作用域。内部变量对同名的父作用域变量进行阴影处理


.

将a
标记为全局变量,并给定值1
a
也在函数
f()
中声明,并给定值2。函数
n()
在函数
f()
中声明,并在赋值给“内部”
a
后调用


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

a
标记为全局变量,并给定值1
a
也在函数
f()
中声明,并给定值2。函数
n()
在函数
f()
中声明,并在赋值给“内部”
a
后调用

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

它将警告“2”

在此处测试您的javascript示例:

您的示例粘贴在此处:

为什么heck是n()未知的
var a

它会提醒“2”

在此处测试您的javascript示例:

您的示例粘贴在此处:


而且为什么heck是n()未知的
vara

“vara是函数n未知的…”在PHP中就是这样。幸运的是,JavaScript不是PHP。“var a对函数n是未知的。”PHP就是这样。幸运的是,JavaScript不是PHP。+1点和良好的链接@用户443946,在该文档中搜索“嵌套函数和闭包”。+1点和良好链接@user443946,在该文档中搜索“嵌套函数和闭包”。