今天写三个数求和的时候,发现函数名字是sum的时候,那个函数只能调用一次,两次以上就有问题;而改函数名字之后,就对了!!醉了醉了。问题代码如下<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<title>函数传参</title>
<script type="text/JavaScript">
function sum(x, y, z)
{
sum = x + y +z;
document.write(x+"、"+y+"、"+z+"和:"+sum+"<br/>");
}
sum(5,8,3);
//下面一行会报错
sum(7,1,4);
</script>
</head>
<body>
</body>
</html>难道是因为函数名字与变量名字不能相同?但应该是可以的吧
4 回答
ruibin
TA贡献358条经验 获得超213个赞
你最主要问题是没有搞清楚什么是局部变量,什么是全局变量。什么时候创建的变量是局部变量,什么时候创建的是全局变量。这个问题的核心是:在函数内部如果我们穿件变量时不使用var,并且这个变量不是参数,那么这个创建的变量会成为全局变量。而这个函数其实就相当于var sum = function(){};你在内部创建一个全局变量,就相当于把这里的var sum 赋值为
x + y +z了。所以这并不是随意不随意的问题。
merry_离
TA贡献2条经验 获得超0个赞
确切的说是同一作用域函数名和变量名不能相同的,你这么写,sum函数的执行过程中,把sum重新指向
x + y +z; 原来的sum这个时候已经变成了x+y+z;
function sum(x, y, z) { var sum = x + y +z; document.write(x+"、"+y+"、"+z+"和:"+sum+"<br/>"); } sum(5,8,3); sum(7,1,4);
如果在function sum() 里面再申明一个sum 并且没有变量提升,就可以避免冲突。
添加回答
举报
0/150
提交
取消