1

在 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()在警报之前调用......是小提琴。请帮助我更好地理解范围。

4

2 回答 2

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); 
于 2012-07-18T11:34:26.220 回答
-1

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

  搜索
   
    优雅的代码基本 javascript 第 1 部分
    优雅的代码基本 javascript 第 2 部分
    ETC...
  
于 2012-07-18T12:38:02.427 回答