JavaScript语言问题
我在运行以下代码时遇到JavaScript错误:JavaScript语言问题,javascript,scope,Javascript,Scope,我在运行以下代码时遇到JavaScript错误: <!DOCTYPE html> <meta charset="utf-8"> <title>Untitled Document</title> <script> var fn = function () { //var aaa = 'AAA'; return function () { alert(aaa);
<!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
但我犯了个错误。为什么?
谢谢大家!
我认为当fn函数运行时,应该能够在foo2函数中找到aaa
不,不应该。aaa在foo2中声明为局部变量,在fn中不可访问。你怎么会不这么想?我所见过的任何编程语言都不会有这样的行为
如果您取消注释行//var aaa='aaa',它将起作用;但是fn内部的警报当然会说AAA而不是BBB
我认为当fn函数运行时,应该能够在foo2函数中找到aaa
不,不应该。aaa在foo2中声明为局部变量,在fn中不可访问。你怎么会不这么想?我所见过的任何编程语言都不会有这样的行为
如果您取消注释行//var aaa='aaa',它将起作用;但是fn内部的警报当然会显示AAA而不是BBB。您在foo2中声明了var AAA,因此其范围仅限于foo2。fn无法访问它
要么在两个函数之外声明var aaa,要么将其作为参数传递给fn。您在foo2中声明了var aaa,因此其范围仅限于foo2。fn无法访问它
要么在两个函数之外声明var aaa,要么将其作为参数传递给fn。它不起作用,因为aaa超出了fn的范围。让你困惑的是
(function () {
alert(aaa); // 'BBB'
})();
正在工作,但fn没有。现在的情况是,由于BBB是在foo2内部定义和调用的,所以alertaaa和aaa在同一个范围内,并且工作正常
因此,您有两种选择:
在更高范围内声明aaa:
var aaa = 'BBB';
var fn = function () {
return function () {
alert(aaa);
};
};
var foo2 = function () {
(function () {
alert(aaa); // 'BBB'
})();
fn();
};
将aaa作为参数传递给fn:
下面是一篇关于javascript作用域的文章:
我希望这能有所帮助。它不起作用,因为aaa超出了fn的范围。让你困惑的是
(function () {
alert(aaa); // 'BBB'
})();
正在工作,但fn没有。现在的情况是,由于BBB是在foo2内部定义和调用的,所以alertaaa和aaa在同一个范围内,并且工作正常
因此,您有两种选择:
在更高范围内声明aaa:
var aaa = 'BBB';
var fn = function () {
return function () {
alert(aaa);
};
};
var foo2 = function () {
(function () {
alert(aaa); // 'BBB'
})();
fn();
};
将aaa作为参数传递给fn:
下面是一篇关于javascript作用域的文章:
我希望这有帮助