猿问

我发现一个蛋疼的问题,sum难道是javascript的关键字不成?

今天写三个数求和的时候,发现函数名字是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>

难道是因为函数名字与变量名字不能相同?但应该是可以的吧

我吃炸土豆
浏览 2175回答 4
4回答

Caballarii

js中函数也是变量,sum原来是个函数,但执行一次以后,sum被赋值x+y+z,变成了一个数值型变量,所以再把它当函数用就报错了。

ruibin

你最主要问题是没有搞清楚什么是局部变量,什么是全局变量。什么时候创建的变量是局部变量,什么时候创建的是全局变量。这个问题的核心是:在函数内部如果我们穿件变量时不使用var,并且这个变量不是参数,那么这个创建的变量会成为全局变量。而这个函数其实就相当于var sum = function(){};你在内部创建一个全局变量,就相当于把这里的var sum 赋值为x + y +z了。所以这并不是随意不随意的问题。

merry_离

确切的说是同一作用域函数名和变量名不能相同的,你这么写,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 并且没有变量提升,就可以避免冲突。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答