具有全局作用域的JavaScript变量

具有全局作用域的JavaScript变量,javascript,scope,Javascript,Scope,这是对的扩展。我尝试了以下代码来理解JavaScript范围 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. 我的查询是,我已经用var声明了变

这是对的扩展。我尝试了以下代码来理解JavaScript范围

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.

我的查询是,我已经用var声明了变量​ 在全局函数中。根据我的理解,x应该是本地的。但它不是这样做的。有人请澄清我的疑问。。。请检查小提琴。将发生以下情况:

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

会弹出一个警报,说“未定义”,因为您试图从全局范围访问变量x,但是x仅在函数a的范围内定义

控制台中出现错误,未定义ReferenceError:x。 所以,正如您所假设的,x确实是私有的,您不能全局访问它

你可能把事情搞砸了,结果不对


可能的情况是,您忘记了x前面的var,这使它突然成为全局对象的成员,而不是局限于函数范围。在这种情况下,最后一个警报将显示13。但是,alerttypeof x会给您编号。

x的作用域是分配给a的函数。最后一个警报从未实际出现-您将得到一个SyntaxError,因为x未定义。您不可能得到13,您将得到“x未定义”,因为x的作用域在a中。可能您也在全局范围内的某个位置设置了x=13。没有任何可能的方法可以警告13。如果您在开发人员控制台中测试代码,则需要确保刷新页面以清除以前设置的x全局值。@SoI-您链接到的小提琴没有警告13。它会向10发出警报,因为您正在向分配给c的函数中的aa值发出警报。