<script language="Javascript">  
var t="hello";
function text(){
alert(t);
var t="HELLO";
alert(t)
}
 </script>
结果为:undefine,HELLO;
请高人解释下

解决方案 »

  1.   

    结果真是那样吗???
    这是因为在 函数内,编译器会把 var "声明"的变量自动提升到最语句前边,但是不会提升"赋值",
    也就相当于function text()
    {
      var t;//提升到最前边并且覆盖全局变量,,
    alert(t);
    t='HELLO';
    alert(t)} 
      

  2.   

    JS变量问题
    你在下面又声明了以个t,虽然是在alert那个全局变量t以后声明的,但是js解析的时候发现你的局部变量声明有一个t,所以把你上面的t也认为是局部变量,而这时候他还是未声明的
      

  3.   

    这是由JS的作用域机制导致的,
    作用域链(scope chain)。作用域链是一个name lookup机制,首先在当前执行环境的scriptObject中寻找,没找到,则顺着upvalue到父scriptObject中寻找,
    一直lookup到全局调用对象(global object)。
    ---
    楼主的代码中,
    alert(t)时,引擎会在当前函数域内寻找是否有t的定义。
    当找到var t="HELLO"; 时,就会认为t是在函数内定义的(这时就不会理睬全局的了).
    但是,这个t是在alert(t)后定义的,在alert(t)时,就会认为是被声明而没定义。
    因此,alert时,t为undefined
      

  4.   

    var t="hello"; 
    function text(){ 
    alert(t); 
    var t="HELLO"; 
    alert(t) 
    } 第二个t为新定义的变量,alert(t) 会不知道是哪个t,所以报错。