请问这两种方式有什么差别吗:
1:<script >
 window.x = 'c';  </script>
   <script>
    var x;
    alert(x);
</script>2.   
<script>
  window.x = 'c';    var x;
    alert(x);
</script>
 IE下:
1。输出c。
2。输出undefined

解决方案 »

  1.   

    变量作用域链的区别!IE里变量作用范围只在当前脚本区域<script>var i=5;</script>,换一个脚本域 〈script>变量i就不存在了,基于变量的这个特点,自然不在同一个作用域的变量不存在的话,显示的就是undefined. 但是火狐不这样认为,因此FF下显示都为c
      

  2.   

    这里有另一篇文章给了另一个解答。。呵呵~~~
    http://hax.javaeye.com/blog/349569
      

  3.   

    to falizixun2:
    sorry,先前我没有验证LZ所说的结果,我刚刚有验证了一下LZ的结果,发现原来是LZ的结论错了.楼主说:
     IE下:
    1。输出c。
    2。输出undefined但实际是:
     IE下:
    1。输出undefined
    2。输出c希望LZ尽快改过来,对falizixun2我非常抱歉,下次我一定先验证过js再说
      

  4.   

    按照程序的样式来看,第一个应该输出的是undefined因为在本区域内定义了的变量x并没有被赋值。第二个……怎么说呢,第二个才是有歧义的地方。
    按照程序的运行来说,变量window.x和x是两个不同的变量。但是IE做处理的时候,因为变量x并没有被赋值,而当前域中却定义了window.x。所以直接找到了变量window.x进行了显示。话说,不管是firefox还是IE,都是这么处理的。
      

  5.   

    是啊~~原来我写的时候写错了。。sorry
      

  6.   

    http://hax.javaeye.com/blog/349569
    嗯~大家觉得这篇文章说得对么?
      

  7.   

    应该先从第2种说:
    2.
    <script>
      window.x = 'c';
      var x;
      alert(x);
    </script>
    JS一个很大的特点是统筹组织之后再实施,所以它允许在一个作用域里的变量先使用后声明,上面的代码实际等同于下面的代码:
    <script>
      var x;
      window.x = 'c';
      alert(x);
    </script>
    而var x又等同于window.x,所以又变成:
    <script>
      var x;
      x = 'c';
      alert(x);
    </script>
    结果为C就很自然,很正常了。然后再看第1种:
    <script >
     window.x = 'c';
      </script>
      <script>
      var x;
      alert(x);
    </script>
    由于不在同一个脚本域,所以上面的规则无法起效(不能跨域去合并逻辑关系,否则关系就乱套了),于是结果就是undefined了。所以理解的关键点很简单,就是JS在整合语句逻辑关系时,会限制在一个较小的作用域或说管理域内,在管理域内会允许你疯狂自由一下,但超出管理域,你就得自行负责不检点的后果了。我不迷信,不迷恋,只是从一个开发人员的角度,感觉很多设计都有其道理,未必是错乱或者BUG,即使FF和IE表现不一,也是不同的设计人员的不同理念,要学会理解,毕竟你还是只能使用人家的东西,与其较劲耍别扭,不如去理解。当然,对这个问题来说,不能因为理解就可以随意去运用,还是要遵从良好的代码规范,避免阅读障碍,和以后解释引擎规则变动所带来的旧有程序瘫痪的问题。