JavaScript 函数作用域
为什么警报在下面的示例中打印 2? var a 的功能未知...
<!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>
Why does the alert print 2 in the below example? var a is unknown to function 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>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
JavaScript 函数继承其父函数的作用域。内部变量隐藏同名的父作用域变量。
进一步阅读。
JavaScript functions inherit their parent's scope. Inner variables shadow parent scope variables with the same name.
Further Reading.
它会提醒“2”。
在这里测试您的 JavaScript 示例:jsfiddle.net
您的示例粘贴在此处:你的 javascript 示例
为什么 n() 不知道
var a
?It would alert "2".
Test your javascript examples here : jsfiddle.net
Your example is pasted here : your javascript example
And why the heck is
var a
unknown to n() ??a
被标记为全局变量,并赋予值为 1。a
也在函数f()
内声明,并赋予值为 1 2. 函数n()
在函数f()
内部声明,并在对“内部”a
赋值后调用。因此,当调用
n
时,标识符a
将从n
的范围内解析。作用域链上第一个具有a
属性的变量对象是在f
中声明的变量对象,因此返回其值。a
is decalred as a global variable and given a value of 1.a
is also declared inside the functionf()
and given a value of 2. Functionn()
is declared inside the functionf()
and called after the assignment to the "inner"a
.So when
n
is called, the identifiera
will be resolved from the scope ofn
. The first variable object on the scope chain with ana
property is the one declared inf
, so its value is returned.