Javascript函数作用域
为什么警报会在下面的示例中打印2?var a对函数n未知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
<!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
标记为全局变量,并给定值1a
也在函数f()
中声明,并给定值2。函数n()
在函数f()
中声明,并在赋值给“内部”a
后调用
因此,当调用
n
时,标识符a
将从n
的范围中解析。具有a
属性的作用域链上的第一个变量对象是在f
中声明的对象,因此返回其值。a
标记为全局变量,并给定值1a
也在函数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,在该文档中搜索“嵌套函数和闭包”。