JavaScript中的函数范围

时间:2012-07-18 11:31:31

标签: javascript scope

在Pro JavaScript with Mootools一书中,我找到了以下行

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也是小提琴。请帮助我更好地了解范围。

2 个答案:

答案 0 :(得分:6)

  

根据我在第一个代码块中的理解,b和c应该是全局变量

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

  

这是小提琴

该代码不同。您有var b,这使b成为局部变量,而不是全局变量。


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

答案 1 :(得分:-1)

谷歌下面的关键词,它是掌握范围和其他JavaScript模式技术的好地方。这是一系列有12个部分的文章。网站上没有直接链接,因此您需要使用部件号

搜索其余文章
  search for
   
    elegant code basic javascript part 1
    elegant code basic javascript part 2
    etc...