日期:2014-05-16  浏览次数:20445 次

让我郁闷半天的一段javaScript代码

斌斌 (给我写信) 原创博文(http://blog.csdn.net/binbinxyz),转载请注明出处!

用js写东西的时候遇到了一个神奇的现象:直接调用某函数A(方便讨论)可以正常运行,在另外的函数B里面调用该函数A一直出错。我声明一点:该函数B与A是无关的。先贴上代码,如下:

代码一:

<!DOCTYPE html>
<html>
  <body>
	<script type="text/javascript">
		function Circle(r) {
		  this.r = r;
		} 
		Circle.prototype.area = function() {
		  return 3.14 * this.r * this.r;
		}
		var a = new Circle(1.0); //此处运行正常
		alert("a:" + a.area());
		
		function init()
		{
			// Some Code ...
		}
		
		var Circle = {
		  PI: 3.14159
		};
		
		init();
	</script>
  </body>
</html>

代码二:

<!DOCTYPE html>
<html>
  <body>
	<script type="text/javascript">
		function Circle(r) {
		  this.r = r;
		} 
		Circle.prototype.area = function() {
		  return 3.14 * this.r * this.r;
		}
		var a = new Circle(1.0); //此处运行正常
		alert("a:" + a.area());
		
		function init()
		{
			// Some Code ...
			
			var b = new Circle(1.0); //此处运行错误
			alert("b:" + b.area());
		}
		
		var Circle = {
		  PI: 3.14159
		};
		
		init();
	</script>
  </body>
</html>

检查再检查,调试再调试,结果还是没有找出问题原因。

最后,在我几乎失望透顶的时候,我随意地点开了DOM树的结构。结果眼前一亮——我发现了如下代码:

	var Circle = {
	  PI: 3.14159
	};
原来是自己之前写的代码忘记删除了。所以,当代码一运行的时候结果正常,而代码二运行的时候会出现错误。

谨记:在javascript中可以重复定义一个函数,但它们存活的时间不同。