A JavaScript Fancier

伟大的javascript技术研究中...

  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  304 随笔 :: 0 文章 :: 479 评论 :: 0 Trackbacks


今天看到了FLASH AS关于变量作用域的讲解,突然想到一个js作用域的问题。
如下代码,猜猜执行后都弹出什么?

  
<script type="text/javascript">
  
<!--
  
var a="xx";
  
function c(){
    alert(a);
    
var a=0;
    alert(a);
  }
  c();
  alert(a)

  
//-->
  </script>
执行上面代码分别弹出了:undefined、0和xx。
可能很多朋友都跟我一样吧,对于那个undefined不知道是怎么来的?
js作用域有些地方真是不好理解,希望高人指点!

posted on 2008-05-29 13:54 Yemoo'S JS Blog 阅读(899) 评论(4)  编辑 收藏 引用 所属分类: javascript代码研究

评论

# re: 关于JS变量作用域的一个疑问 2008-06-09 13:29 thinking
我是这样理解的在c()这个函数作用域中var a已经把a定义为这个函数中的变量,而之前的alert(a);是在定义之前就使用所以就打印undefined  回复  更多评论
  

# re: 关于JS变量作用域的一个疑问 2008-10-27 19:05 null
因为 Javascript为了简化处理,变量实际上只有两种作用域,全局变量和函数的内部变量。你在函数内部任何一个地方定义的变量其作用域都是整个函数体。而在 alert 的时候函数的内部变量 a已经定义了,并且覆盖掉了同名的全局变量的定义,只是还没有被初始化,所以 alert 出来的是 "undefined"。  回复  更多评论
  

# re: 关于JS变量作用域的一个疑问 2009-11-09 09:11 boliedwater
函数变量的作用域是在函数定义的时候的作用域的,而不是函数调用时候的作用地.
函数c,在调用的时候会有一个预编译的过程,其函数参数和内部变量会被赋值为undefined.在调用的时候还有一个变量赋值过程.
function c(){
alert(a);//此时的a作用域是函数内部,为undefined
var a=0;
alert(a);//上面的a赋值为0,而此时弹出0
}

alert(a)// 此时的a为全局变量的a,则为xx

不足之处,请大家指正!


  回复  更多评论
  

# re: 关于JS变量作用域的一个疑问 2010-09-27 15:23 liubotaowan@sina.com
全局作用域-->c的作用域
首先在c的作用域里面找,而c定义了该变量,所以使用该变量,但是还末赋值,所以是undefined。这里要说明一点,就是作用域内的变量不管在函数的哪里声明,javascript都会在函数运行前在作用域内包含该变量。  回复  更多评论
  

只有注册用户登录后才能发表评论。