【问题标题】:JavaScript variable with global scope [closed]具有全局范围的 JavaScript 变量
【发布时间】:2012-07-17 13:45:59
【问题描述】:

这是Question 的扩展。我试过下面的代码来理解 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 应该是本地的。但它不是那样行事。有人请清除我的疑问...请检查thisfiddle。

【问题讨论】:

  • x 的作用域是分配给a 的函数。最后一个 alert 从未真正出现 - 你会得到一个 SyntaxError 因为 x 没有定义。
  • 你不可能得到 13,你会得到 'x is not defined' 因为 x 是在 a 范围内。也许你在全局范围内的某个地方也设置了 x = 13。
  • 不可能提醒“13”。
  • 如果您在开发者控制台中测试您的代码,您需要确保刷新页面以清除之前设置的所有 x 全局变量。
  • @SoI - 您链接的小提琴没有提醒“13”。它会警告“10”,因为您在分配给c 的函数内警告aa 的值。

标签: javascript scope


【解决方案1】:

会发生以下情况:

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

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

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

因此,正如您所假设的,x 确实是私有的,您无法全局访问它。

你可能搞砸了一些东西,给你错误的结果。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 2015-09-30
    • 2013-01-24
    • 1970-01-01
    • 2012-11-05
    • 2014-09-17
    • 1970-01-01
    相关资源
    最近更新 更多