2012-07-18 192 views
-6

这是对Question的扩展。我曾尝试下面的代码来理解JavaScript作用域的全局函数里面具有全局范围的JavaScript变量

var
var a = function(){ 
    var aa = 10; 
    var x = 13;    
    b = function(){ c = function(){ alert(aa); }; };  
}; 
a(); 
b(); 
c(); 
alert(typeof x);​ // Undefined 
alert(x);​ // Returned me 13. 

我查询我已经声明的变量。根据我的理解,x应该是本地的。但它不是那样行事。有人请清除我的疑问...请检查this小提琴。

+3

'x'的作用域被分配给'a'的函数。最后一个'alert'从来没有真正出现过 - 你会得到一个SyntaxError,因为'x'没有被定义。 – 2012-07-18 13:45:30

+1

有没有办法你会得到13,你会得到'x没有定义',因为x的范围在a中。也许你已经在全球范围内的某个地方设置了x = 13。 – Angel 2012-07-18 13:46:28

+0

http://jsfiddle.net/MYbKT/由于@JamesAllardice说 – scottheckel 2012-07-18 13:46:32

回答

3

将发生以下情况:

警报弹出,显示的aa值= 10

警报弹出,说undefined因为你正试图从全球范围内访问变量x,但是x仅在函数a的范围内定义。

控制台出现错误,ReferenceError: x is not defined

因此,如你所想,x确实是私人的,你不能全局访问它。

你可能搞砸了,给你错误的结果。

可能发生的情况是,您忘记了x前面的var,它突然使其成为全局对象的成员,而不是被限制在函数范围内。在这种情况下,最后一次警报会给你13.但是警报(typeof x)会给你"number"