请问这两种方式有什么差别吗:
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:<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
http://hax.javaeye.com/blog/349569
sorry,先前我没有验证LZ所说的结果,我刚刚有验证了一下LZ的结果,发现原来是LZ的结论错了.楼主说:
IE下:
1。输出c。
2。输出undefined但实际是:
IE下:
1。输出undefined
2。输出c希望LZ尽快改过来,对falizixun2我非常抱歉,下次我一定先验证过js再说
按照程序的运行来说,变量window.x和x是两个不同的变量。但是IE做处理的时候,因为变量x并没有被赋值,而当前域中却定义了window.x。所以直接找到了变量window.x进行了显示。话说,不管是firefox还是IE,都是这么处理的。
嗯~大家觉得这篇文章说得对么?
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表现不一,也是不同的设计人员的不同理念,要学会理解,毕竟你还是只能使用人家的东西,与其较劲耍别扭,不如去理解。当然,对这个问题来说,不能因为理解就可以随意去运用,还是要遵从良好的代码规范,避免阅读障碍,和以后解释引擎规则变动所带来的旧有程序瘫痪的问题。