【问题标题】:Functions Scope in JavaScriptJavaScript 中的函数作用域
【发布时间】:2012-07-18 11:31:30
【问题描述】:

在带有 Mootools 的 Pro JavaScript 书中,我找到了以下行

The scoping rules for function expressions are a bit different from function 
declarations because they depend on variable scoping. Remember that in 
JavaScript, the var keyword defines a variable to be scoped locally, and 
omitting the keyword creates a global variable instead:    

据我了解,我编写了以下代码并尝试检查此

var a = function(){ 
   b = function(){ c = function(){ alert("b"); }; };
};
alert(typeof a); // Returned me 'function'
alert(typeof b); // Returned me 'undefined'
alert(typeof c); // Returned me 'undefined'

下面我也试过了

var a = function(){ 
   var b = function(){ c = function(){ alert("b"); }; };
};
alert(typeof a); // Returned me 'function'
alert(typeof b); // Returned me 'undefined'
alert(typeof c); // Returned me 'undefined'​​

请您解释一下,以便我更好地理解。根据我在第一个代码块中的理解 b 和 c 应该是全局变量。但在这种情况下不会发生这种情况。即使我试图在警报之前调用a()...Here 是小提琴。请帮助我更好地了解范围。

【问题讨论】:

    标签: javascript scope


    【解决方案1】:

    根据我对第一段代码的理解,b 和 c 应该是全局变量

    它们是,但在调用a 之前(在c 的情况下调用b 之前),它们不会被分配值。

    这是小提琴

    那个代码是不同的。你有var b,这使得b 成为局部变量而不是全局变量。


    var a = function(){ 
       b = function(){ c = function(){ alert("b"); }; };
    };
    a();
    b();
    alert(typeof a); 
    alert(typeof b); 
    alert(typeof c); 
    

    【讨论】:

    • 请看小提琴jsfiddle.net/HJ4vK/5。在这种情况下。 b 也变成全局变量了吧?
    • 不,因为您声明 var b 它是包含块的本地,在这种情况下是分配给 var a 的函数。
    • JavaScript 没有块作用域。 var 将事物本地化到包含它们的最近函数(仍然是分配给 a 的函数)。
    • @Quentin 最接近c 的函数是ab?
    • a = function(){ b = function(){ c = … 哪个看起来更接近?
    【解决方案2】:

    谷歌下面的关键词,它是掌握作用域和其他 javascript 模式技术的好地方。它是一个包含 12 个部分的系列文章。网站上没有直接链接,因此您需要使用零件编号搜索其余文章

    搜索 优雅的代码基本 javascript 第 1 部分 优雅的代码基本 javascript 第 2 部分 ETC...

    【讨论】:

      猜你喜欢
      • 2015-08-22
      • 1970-01-01
      • 2011-03-11
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      相关资源
      最近更新 更多