码迷,mamicode.com
首页 > 编程语言 > 详细

【JavaScript】变量冲突是可以通过编译的

时间:2015-02-25 17:11:19      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:javascript   变量冲突   变量作用域   变量   作用域   

在JavaScript中,以下的代码是一段合法的程序:

var i=0;
var i=1;
alert(i);

其运行结果是弹窗输出1,

看上去半点问题没有,但是,在Java,C等一些编程语言中,以下类似的代码就不是一段合法的程序:

int i=0;
int i=0;

编译都不能通过编译,何况运行呢?因为变量i被重复定义,而JavaScript中,纵使变量i被重复定义也一样没问题,这就是静态作用域与动态作用域的问题。静态作用域与动态作用域具体是什么,这里就不大段大段地放上一大段《编译原理》里面的概念上来,看着就头晕。

在Javascript中,这样纵使变量i被重复定义也一样没问题,纵使变量冲突也是可以通过编译的,倒底有什么问题呢?

问题是非常大的。导致比如下面的一段程序中的错误非常难以发现:

for(var i=0;i<1;i++){
	for(var i=0;i<1;i++){
	}
}

这在Java,C等一些编程语言中,会提示变量i被重复定义,因为里面的for中的计算变量i,应该写成j或者其它,但是Javascript不会,你的网页打开之后,不会在浏览器下面显示:技术分享,然后你就发现你的所需要的特效打死也无法正常运行。尤其是在现在天下代码一大抄的背景下,在这两个for相隔甚远的情况下,你很难发现,你写的代码,与你复制下来的代码是否存在冲突。

【JavaScript】变量冲突是可以通过编译的

标签:javascript   变量冲突   变量作用域   变量   作用域   

原文地址:http://blog.csdn.net/yongh701/article/details/43937705

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!